/*jshint strict: false, maxlen: 500 */ /*global require, assertEqual */ //////////////////////////////////////////////////////////////////////////////// /// @brief tests for query language, functions /// /// @file /// /// DISCLAIMER /// /// Copyright 2010-2012 triagens GmbH, Cologne, Germany /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. /// You may obtain a copy of the License at /// /// http://www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, software /// distributed under the License is distributed on an "AS IS" BASIS, /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. /// See the License for the specific language governing permissions and /// limitations under the License. /// /// Copyright holder is triAGENS GmbH, Cologne, Germany /// /// @author Jan Steemann /// @author Copyright 2012, triAGENS GmbH, Cologne, Germany //////////////////////////////////////////////////////////////////////////////// var internal = require("internal"); var errors = internal.errors; var jsunity = require("jsunity"); var helper = require("org/arangodb/aql-helper"); var getQueryResults = helper.getQueryResults; var assertQueryError = helper.assertQueryError; var assertQueryWarningAndNull = helper.assertQueryWarningAndNull; //////////////////////////////////////////////////////////////////////////////// /// @brief test suite //////////////////////////////////////////////////////////////////////////////// function ahuacatlDateFunctionsTestSuite () { return { //////////////////////////////////////////////////////////////////////////////// /// @brief test date_now function //////////////////////////////////////////////////////////////////////////////// testDateNowInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_NOW(1)"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_NOW(1, 1)"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_now function //////////////////////////////////////////////////////////////////////////////// testDateNow : function () { var actual = getQueryResults("RETURN IS_NUMBER(DATE_NOW())")[0]; assertEqual(true, actual); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_dayofweek function //////////////////////////////////////////////////////////////////////////////// testDateDayOfWeekInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_DAYOFWEEK()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_DAYOFWEEK(1, 1)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_DAYOFWEEK(null)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_DAYOFWEEK(false)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_DAYOFWEEK([])"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_DAYOFWEEK({})"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_dayofweek function //////////////////////////////////////////////////////////////////////////////// testDateDayOfWeek : function () { var values = [ [ "2000-04-29", 6 ], [ "2000-04-29Z", 6 ], [ "2012-02-12 13:24:12", 0 ], [ "2012-02-12 13:24:12Z", 0 ], [ "2012-02-12 23:59:59.991", 0 ], [ "2012-02-12 23:59:59.991Z", 0 ], [ "2012-02-12", 0 ], [ "2012-02-12Z", 0 ], [ "2012-02-12T13:24:12Z", 0 ], [ "2012-02-12Z", 0 ], [ "2012-2-12Z", 0 ], [ "1910-01-02T03:04:05Z", 0 ], [ "1910-01-02 03:04:05Z", 0 ], [ "1910-01-02", 0 ], [ "1910-01-02Z", 0 ], [ "1970-01-01T01:05:27", 4 ], [ "1970-01-01T01:05:27Z", 4 ], [ "1970-01-01 01:05:27Z", 4 ], [ "1970-1-1Z", 4 ], [ "1221-02-28T23:59:59Z", 0 ], [ "1221-02-28 23:59:59Z", 0 ], [ "1221-02-28Z", 0 ], [ "1221-2-28Z", 0 ], [ "1000-12-24T04:12:00Z", 3 ], [ "1000-12-24Z", 3 ], [ "1000-12-24 04:12:00Z", 3 ], [ "6789-12-31T23:59:58.99Z", 0 ], [ "6789-12-31Z", 0 ], [ "9999-12-31T23:59:59.999Z", 5 ], [ "9999-12-31Z", 5 ], [ "9999-12-31z", 5 ], [ "9999-12-31", 5 ], [ "2012Z", 0 ], [ "2012z", 0 ], [ "2012", 0 ], [ "2012-1Z", 0 ], [ "2012-1z", 0 ], [ "2012-1-1z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-01Z", 0 ], [ " 2012-01-01Z", 0 ], [ " 2012-01-01z", 0 ], [ 1399395674000, 2 ], [ 60123, 4 ], [ 1, 4 ], [ 0, 4 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_DAYOFWEEK(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_year function //////////////////////////////////////////////////////////////////////////////// testDateYearInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_YEAR()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_YEAR(1, 1)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_YEAR(null)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_YEAR(false)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_YEAR([])"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_YEAR({})"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_year function //////////////////////////////////////////////////////////////////////////////// testDateYear : function () { var values = [ [ "2000-04-29Z", 2000 ], [ "2012-02-12 13:24:12Z", 2012 ], [ "2012-02-12 23:59:59.991Z", 2012 ], [ "2012-02-12Z", 2012 ], [ "2012-02-12T13:24:12Z", 2012 ], [ "2012-02-12Z", 2012 ], [ "2012-2-12Z", 2012 ], [ "1910-01-02T03:04:05Z", 1910 ], [ "1910-01-02 03:04:05Z", 1910 ], [ "1910-01-02Z", 1910 ], [ "1970-01-01T01:05:27Z", 1970 ], [ "1970-01-01 01:05:27Z", 1970 ], [ "1970-1-1Z", 1970 ], [ "1221-02-28T23:59:59Z", 1221 ], [ "1221-02-28 23:59:59Z", 1221 ], [ "1221-02-28Z", 1221 ], [ "1221-2-28Z", 1221 ], [ "1000-12-24T04:12:00Z", 1000 ], [ "1000-12-24Z", 1000 ], [ "1000-12-24 04:12:00Z", 1000 ], [ "6789-12-31T23:59:58.99Z", 6789 ], [ "6789-12-31Z", 6789 ], [ "9999-12-31T23:59:59.999Z", 9999 ], [ "9999-12-31Z", 9999 ], [ "9999-12-31z", 9999 ], [ "9999-12-31", 9999 ], [ "2012Z", 2012 ], [ "2012z", 2012 ], [ "2012", 2012 ], [ "2012-1Z", 2012 ], [ "2012-1z", 2012 ], [ "2012-1-1z", 2012 ], [ "2012-01-01Z", 2012 ], [ "2012-01-01Z", 2012 ], [ " 2012-01-01Z", 2012 ], [ " 2012-01-01z", 2012 ], [ 1399395674000, 2014 ], [ 60123, 1970 ], [ 1, 1970 ], [ 0, 1970 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_YEAR(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_month function //////////////////////////////////////////////////////////////////////////////// testDateMonthInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_MONTH()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_MONTH(1, 1)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MONTH(null)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MONTH(false)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MONTH([])"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MONTH({})"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_month function //////////////////////////////////////////////////////////////////////////////// testDateMonth : function () { var values = [ [ "2000-04-29Z", 4 ], [ "2012-02-12 13:24:12Z", 2 ], [ "2012-02-12 23:59:59.991Z", 2 ], [ "2012-02-12Z", 2 ], [ "2012-02-12T13:24:12Z", 2 ], [ "2012-02-12Z", 2 ], [ "2012-2-12Z", 2 ], [ "1910-01-02T03:04:05Z", 1 ], [ "1910-01-02 03:04:05Z", 1 ], [ "1910-01-02Z", 1 ], [ "1970-01-01T01:05:27Z", 1 ], [ "1970-01-01 01:05:27Z", 1 ], [ "1970-1-1Z", 1 ], [ "1221-02-28T23:59:59Z", 2 ], [ "1221-02-28 23:59:59Z", 2 ], [ "1221-02-28Z", 2 ], [ "1221-2-28Z", 2 ], [ "1000-12-24T04:12:00Z", 12 ], [ "1000-12-24Z", 12 ], [ "1000-12-24 04:12:00Z", 12 ], [ "6789-12-31T23:59:58.99Z", 12 ], [ "6789-12-31Z", 12 ], [ "9999-12-31T23:59:59.999Z", 12 ], [ "9999-12-31Z", 12 ], [ "9999-12-31z", 12 ], [ "9999-12-31", 12 ], [ "2012Z", 1 ], [ "2012z", 1 ], [ "2012", 1 ], [ "2012-2Z", 2 ], [ "2012-1Z", 1 ], [ "2012-1z", 1 ], [ "2012-1-1z", 1 ], [ "2012-01-01Z", 1 ], [ "2012-01-01Z", 1 ], [ " 2012-01-01Z", 1 ], [ " 2012-01-01z", 1 ], [ 1399395674000, 5 ], [ 60123, 1 ], [ 1, 1 ], [ 0, 1 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_MONTH(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_day function //////////////////////////////////////////////////////////////////////////////// testDateDayInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_DAY()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_DAY(1, 1)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_DAY(null)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_DAY(false)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_DAY([])"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_DAY({})"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_day function //////////////////////////////////////////////////////////////////////////////// testDateDay : function () { var values = [ [ "2000-04-29Z", 29 ], [ "2012-02-12 13:24:12Z", 12 ], [ "2012-02-12 23:59:59.991Z", 12 ], [ "2012-02-12Z", 12 ], [ "2012-02-12T13:24:12Z", 12 ], [ "2012-02-12Z", 12 ], [ "2012-2-12Z", 12 ], [ "1910-01-02T03:04:05Z", 2 ], [ "1910-01-02 03:04:05Z", 2 ], [ "1910-01-02Z", 2 ], [ "1970-01-01T01:05:27Z", 1 ], [ "1970-01-01 01:05:27Z", 1 ], [ "1970-1-1Z", 1 ], [ "1221-02-28T23:59:59Z", 28 ], [ "1221-02-28 23:59:59Z", 28 ], [ "1221-02-28Z", 28 ], [ "1221-2-28Z", 28 ], [ "1000-12-24T04:12:00Z", 24 ], [ "1000-12-24Z", 24 ], [ "1000-12-24 04:12:00Z", 24 ], [ "6789-12-31T23:59:58.99Z", 31 ], [ "6789-12-31Z", 31 ], [ "9999-12-31T23:59:59.999Z", 31 ], [ "9999-12-31Z", 31 ], [ "9999-12-31z", 31 ], [ "9999-12-31", 31 ], [ "2012Z", 1 ], [ "2012z", 1 ], [ "2012", 1 ], [ "2012-2Z", 1 ], [ "2012-1Z", 1 ], [ "2012-1z", 1 ], [ "2012-1-1z", 1 ], [ "2012-01-01Z", 1 ], [ "2012-01-01Z", 1 ], [ "2012-01-02Z", 2 ], [ "2012-01-2Z", 2 ], [ " 2012-01-01Z", 1 ], [ " 2012-01-01z", 1 ], [ 1399395674000, 6 ], [ 60123, 1 ], [ 1, 1 ], [ 0, 1 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_DAY(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_hour function //////////////////////////////////////////////////////////////////////////////// testDateHourInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_HOUR()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_HOUR(1, 1)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_HOUR(null)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_HOUR(false)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_HOUR([])"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_HOUR({})"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_hour function //////////////////////////////////////////////////////////////////////////////// testDateHour : function () { var values = [ [ "2000-04-29", 0 ], [ "2000-04-29Z", 0 ], [ "2012-02-12 13:24:12", 13 ], [ "2012-02-12 13:24:12Z", 13 ], [ "2012-02-12 23:59:59.991Z", 23 ], [ "2012-02-12", 0 ], [ "2012-02-12Z", 0 ], [ "2012-02-12T13:24:12", 13 ], [ "2012-02-12T13:24:12Z", 13 ], [ "2012-02-12", 0 ], [ "2012-02-12Z", 0 ], [ "2012-2-12Z", 0 ], [ "1910-01-02T03:04:05", 3 ], [ "1910-01-02T03:04:05Z", 3 ], [ "1910-01-02 03:04:05Z", 3 ], [ "1910-01-02Z", 0 ], [ "1970-01-01T01:05:27Z", 1 ], [ "1970-01-01 01:05:27Z", 1 ], [ "1970-01-01T12:05:27Z", 12 ], [ "1970-01-01 12:05:27Z", 12 ], [ "1970-1-1Z", 0 ], [ "1221-02-28T23:59:59Z", 23 ], [ "1221-02-28 23:59:59Z", 23 ], [ "1221-02-28Z", 0 ], [ "1221-2-28Z", 0 ], [ "1000-12-24T04:12:00Z", 4 ], [ "1000-12-24Z", 0 ], [ "1000-12-24 04:12:00Z", 4 ], [ "6789-12-31T23:59:58.99Z", 23 ], [ "6789-12-31Z", 0 ], [ "9999-12-31T23:59:59.999Z", 23 ], [ "9999-12-31Z", 0 ], [ "9999-12-31z", 0 ], [ "9999-12-31", 0 ], [ "2012Z", 0 ], [ "2012z", 0 ], [ "2012", 0 ], [ "2012-2Z", 0 ], [ "2012-1Z", 0 ], [ "2012-1z", 0 ], [ "2012-1-1z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-02Z", 0 ], [ "2012-01-2Z", 0 ], [ " 2012-01-01Z", 0 ], [ " 2012-01-01z", 0 ], [ 1399395674000, 17 ], [ 3600000, 1 ], [ 7200000, 2 ], [ 8200000, 2 ], [ 60123, 0 ], [ 1, 0 ], [ 0, 0 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_HOUR(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_minute function //////////////////////////////////////////////////////////////////////////////// testDateMinuteInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_MINUTE()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_MINUTE(1, 1)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MINUTE(null)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MINUTE(false)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MINUTE([])"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MINUTE({})"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_minute function //////////////////////////////////////////////////////////////////////////////// testDateMinute : function () { var values = [ [ "2000-04-29Z", 0 ], [ "2012-02-12 13:24:12Z", 24 ], [ "2012-02-12 23:59:59.991Z", 59 ], [ "2012-02-12Z", 0 ], [ "2012-02-12T13:24:12Z", 24 ], [ "2012-02-12Z", 0 ], [ "2012-2-12Z", 0 ], [ "1910-01-02T03:04:05Z", 4 ], [ "1910-01-02 03:04:05Z", 4 ], [ "1910-01-02Z", 0 ], [ "1970-01-01T01:05:27Z", 5 ], [ "1970-01-01 01:05:27Z", 5 ], [ "1970-01-01T12:05:27Z", 5 ], [ "1970-01-01 12:05:27Z", 5 ], [ "1970-1-1Z", 0 ], [ "1221-02-28T23:59:59Z", 59 ], [ "1221-02-28 23:59:59Z", 59 ], [ "1221-02-28Z", 0 ], [ "1221-2-28Z", 0 ], [ "1000-12-24T04:12:00Z", 12 ], [ "1000-12-24Z", 0 ], [ "1000-12-24 04:12:00Z", 12 ], [ "6789-12-31T23:59:58.99Z", 59 ], [ "6789-12-31Z", 0 ], [ "9999-12-31T23:59:59.999Z", 59 ], [ "9999-12-31Z", 0 ], [ "9999-12-31z", 0 ], [ "9999-12-31", 0 ], [ "2012Z", 0 ], [ "2012z", 0 ], [ "2012", 0 ], [ "2012-2Z", 0 ], [ "2012-1Z", 0 ], [ "2012-1z", 0 ], [ "2012-1-1z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-02Z", 0 ], [ "2012-01-2Z", 0 ], [ " 2012-01-01Z", 0 ], [ " 2012-01-01z", 0 ], [ 1399395674000, 1 ], [ 3600000, 0 ], [ 7200000, 0 ], [ 8200000, 16 ], [ 60123, 1 ], [ 1, 0 ], [ 0, 0 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_MINUTE(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_second function //////////////////////////////////////////////////////////////////////////////// testDateSecondInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_SECOND()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_SECOND(1, 1)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_SECOND(null)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_SECOND(false)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_SECOND([])"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_SECOND({})"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_second function //////////////////////////////////////////////////////////////////////////////// testDateSecond : function () { var values = [ [ "2000-04-29Z", 0 ], [ "2012-02-12 13:24:12Z", 12 ], [ "2012-02-12 23:59:59.991Z", 59 ], [ "2012-02-12Z", 0 ], [ "2012-02-12T13:24:12Z", 12 ], [ "2012-02-12Z", 0 ], [ "2012-2-12Z", 0 ], [ "1910-01-02T03:04:05Z", 5 ], [ "1910-01-02 03:04:05Z", 5 ], [ "1910-01-02Z", 0 ], [ "1970-01-01T01:05:27Z", 27 ], [ "1970-01-01 01:05:27Z", 27 ], [ "1970-01-01T12:05:27Z", 27 ], [ "1970-01-01 12:05:27Z", 27 ], [ "1970-1-1Z", 0 ], [ "1221-02-28T23:59:59Z", 59 ], [ "1221-02-28 23:59:59Z", 59 ], [ "1221-02-28Z", 0 ], [ "1221-2-28Z", 0 ], [ "1000-12-24T04:12:00Z", 0 ], [ "1000-12-24Z", 0 ], [ "1000-12-24 04:12:00Z", 0 ], [ "6789-12-31T23:59:58.99Z", 58 ], [ "6789-12-31Z", 0 ], [ "9999-12-31T23:59:59.999Z", 59 ], [ "9999-12-31Z", 0 ], [ "9999-12-31z", 0 ], [ "9999-12-31", 0 ], [ "2012Z", 0 ], [ "2012z", 0 ], [ "2012", 0 ], [ "2012-2Z", 0 ], [ "2012-1Z", 0 ], [ "2012-1z", 0 ], [ "2012-1-1z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-02Z", 0 ], [ "2012-01-2Z", 0 ], [ " 2012-01-01Z", 0 ], [ " 2012-01-01z", 0 ], [ 1399395674000, 14 ], [ 3600000, 0 ], [ 7200000, 0 ], [ 8200000, 40 ], [ 61123, 1 ], [ 60123, 0 ], [ 2001, 2 ], [ 2000, 2 ], [ 1000, 1 ], [ 1, 0 ], [ 0, 0 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_SECOND(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_millisecond function //////////////////////////////////////////////////////////////////////////////// testDateMillisecondInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_MILLISECOND()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_MILLISECOND(1, 1)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MILLISECOND(null)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MILLISECOND(false)"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MILLISECOND([])"); assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_MILLISECOND({})"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_millisecond function //////////////////////////////////////////////////////////////////////////////// testDateMillisecond : function () { var values = [ [ "2000-04-29Z", 0 ], [ "2012-02-12 13:24:12Z", 0 ], [ "2012-02-12 23:59:59.991Z", 991 ], [ "2012-02-12Z", 0 ], [ "2012-02-12T13:24:12Z", 0 ], [ "2012-02-12Z", 0 ], [ "2012-2-12Z", 0 ], [ "1910-01-02T03:04:05Z", 0 ], [ "1910-01-02 03:04:05Z", 0 ], [ "1910-01-02Z", 0 ], [ "1970-01-01T01:05:27Z", 0 ], [ "1970-01-01 01:05:27Z", 0 ], [ "1970-01-01T12:05:27Z", 0 ], [ "1970-01-01 12:05:27Z", 0 ], [ "1970-1-1Z", 0 ], [ "1221-02-28T23:59:59Z", 0 ], [ "1221-02-28 23:59:59Z", 0 ], [ "1221-02-28Z", 0 ], [ "1221-2-28Z", 0 ], [ "1000-12-24T04:12:00Z", 0 ], [ "1000-12-24Z", 0 ], [ "1000-12-24 04:12:00Z", 0 ], [ "6789-12-31T23:59:58.99Z", 990 ], [ "6789-12-31Z", 0 ], [ "9999-12-31T23:59:59.999Z", 999 ], [ "9999-12-31Z", 0 ], [ "9999-12-31z", 0 ], [ "9999-12-31", 0 ], [ "2012Z", 0 ], [ "2012z", 0 ], [ "2012", 0 ], [ "2012-2Z", 0 ], [ "2012-1Z", 0 ], [ "2012-1z", 0 ], [ "2012-1-1z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-01Z", 0 ], [ "2012-01-02Z", 0 ], [ "2012-01-2Z", 0 ], [ " 2012-01-01Z", 0 ], [ " 2012-01-01z", 0 ], [ 1399395674000, 0 ], [ 1399395674123, 123 ], [ 3600000, 0 ], [ 7200000, 0 ], [ 8200000, 0 ], [ 8200040, 40 ], [ 61123, 123 ], [ 60123, 123 ], [ 2001, 1 ], [ 2000, 0 ], [ 1000, 0 ], [ 753, 753 ], [ 53, 53 ], [ 1, 1 ], [ 0, 0 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_MILLISECOND(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_timestamp function //////////////////////////////////////////////////////////////////////////////// testDateTimestampInvalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_TIMESTAMP()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_TIMESTAMP(1, 1, 1, 1, 1, 1, 1, 1)"); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_timestamp function //////////////////////////////////////////////////////////////////////////////// testDateTimestamp : function () { var values = [ [ "2000-04-29", 956966400000 ], [ "2000-04-29Z", 956966400000 ], [ "2012-02-12 13:24:12", 1329053052000 ], [ "2012-02-12 13:24:12Z", 1329053052000 ], [ "2012-02-12 23:59:59.991", 1329091199991 ], [ "2012-02-12 23:59:59.991Z", 1329091199991 ], [ "2012-02-12", 1329004800000 ], [ "2012-02-12Z", 1329004800000 ], [ "2012-02-12T13:24:12", 1329053052000 ], [ "2012-02-12T13:24:12Z", 1329053052000 ], [ "2012-02-12Z", 1329004800000 ], [ "2012-2-12Z", 1329004800000 ], [ "1910-01-02T03:04:05", -1893358555000 ], [ "1910-01-02T03:04:05Z", -1893358555000 ], [ "1910-01-02 03:04:05Z", -1893358555000 ], [ "1910-01-02", -1893369600000 ], [ "1910-01-02Z", -1893369600000 ], [ "1970-01-01T01:05:27Z", 3927000 ], [ "1970-01-01 01:05:27Z", 3927000 ], [ "1970-01-01T12:05:27Z", 43527000 ], [ "1970-01-01 12:05:27Z", 43527000 ], [ "1970-1-1Z", 0 ], [ "1221-02-28T23:59:59Z", -23631004801000 ], [ "1221-02-28 23:59:59Z", -23631004801000 ], [ "1221-02-28Z", -23631091200000 ], [ "1221-2-28Z", -23631091200000 ], [ "1000-12-24T04:12:00Z", -30579364080000 ], [ "1000-12-24Z", -30579379200000 ], [ "1000-12-24 04:12:00Z", -30579364080000 ], [ "6789-12-31T23:59:58.99Z", 152104521598990 ], [ "6789-12-31Z", 152104435200000 ], [ "9999-12-31T23:59:59.999Z", 253402300799999 ], [ "9999-12-31Z", 253402214400000 ], [ "9999-12-31z", 253402214400000 ], [ "9999-12-31", 253402214400000 ], [ "2012Z", 1325376000000 ], [ "2012z", 1325376000000 ], [ "2012", 1325376000000 ], [ "2012-2Z", 1328054400000 ], [ "2012-1Z", 1325376000000 ], [ "2012-1z", 1325376000000 ], [ "2012-1-1z", 1325376000000 ], [ "2012-01-01Z", 1325376000000 ], [ "2012-01-01Z", 1325376000000 ], [ "2012-01-02Z", 1325462400000 ], [ "2012-01-2Z", 1325462400000 ], [ " 2012-01-01Z", 1325376000000 ], [ " 2012-01-01z", 1325376000000 ], [ 1399395674000, 1399395674000 ], [ 3600000, 3600000 ], [ 7200000, 7200000 ], [ 8200000, 8200000 ], [ 61123, 61123 ], [ 60123, 60123 ], [ 2001, 2001 ], [ 2000, 2000 ], [ 1000, 1000 ], [ 121, 121 ], [ 1, 1 ], [ 0, 0 ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_TIMESTAMP(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_iso8601 function //////////////////////////////////////////////////////////////////////////////// testDateIso8601Invalid : function () { assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_ISO8601()"); assertQueryError(errors.ERROR_QUERY_FUNCTION_ARGUMENT_NUMBER_MISMATCH.code, "RETURN DATE_ISO8601(1, 1, 1, 1, 1, 1, 1, 1)"); var values = [ "foobar", "2012fjh", " 2012tjjgg", "", " ", "abc2012-01-01", "2000-00-00", "2001-02-11 24:00:00", "2001-02-11 24:01:01", "2001-02-11 25:01:01", "2001-02-11 23:60:00", "2001-02-11 23:01:60", "2001-02-11 23:01:99", "2001-00-11", "2001-0-11", "2001-13-11", "2001-13-32", "2001-01-0", "2001-01-00", "2001-01-32", "2001-1-32" ]; values.forEach(function(value) { assertQueryWarningAndNull(errors.ERROR_QUERY_INVALID_DATE_VALUE.code, "RETURN DATE_ISO8601(@value)", { value: value }); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_iso8601 function //////////////////////////////////////////////////////////////////////////////// testDateIso8601 : function () { var values = [ [ "2000-04-29", "2000-04-29T00:00:00.000Z" ], [ "2000-04-29Z", "2000-04-29T00:00:00.000Z" ], [ "2012-02-12 13:24:12", "2012-02-12T13:24:12.000Z" ], [ "2012-02-12 13:24:12Z", "2012-02-12T13:24:12.000Z" ], [ "2012-02-12 23:59:59.991", "2012-02-12T23:59:59.991Z" ], [ "2012-02-12 23:59:59.991Z", "2012-02-12T23:59:59.991Z" ], [ "2012-02-12", "2012-02-12T00:00:00.000Z" ], [ "2012-02-12Z", "2012-02-12T00:00:00.000Z" ], [ "2012-02-12T13:24:12", "2012-02-12T13:24:12.000Z" ], [ "2012-02-12T13:24:12Z", "2012-02-12T13:24:12.000Z" ], [ "2012-02-12Z", "2012-02-12T00:00:00.000Z" ], [ "2012-2-12Z", "2012-02-12T00:00:00.000Z" ], [ "1910-01-02T03:04:05", "1910-01-02T03:04:05.000Z" ], [ "1910-01-02T03:04:05Z", "1910-01-02T03:04:05.000Z" ], [ "1910-01-02 03:04:05", "1910-01-02T03:04:05.000Z" ], [ "1910-01-02 03:04:05Z", "1910-01-02T03:04:05.000Z" ], [ "1910-01-02", "1910-01-02T00:00:00.000Z" ], [ "1910-01-02Z", "1910-01-02T00:00:00.000Z" ], [ "1970-01-01T01:05:27+01:00", "1970-01-01T00:05:27.000Z" ], [ "1970-01-01T01:05:27-01:00", "1970-01-01T02:05:27.000Z" ], [ "1970-01-01T01:05:27", "1970-01-01T01:05:27.000Z" ], [ "1970-01-01T01:05:27Z", "1970-01-01T01:05:27.000Z" ], [ "1970-01-01 01:05:27Z", "1970-01-01T01:05:27.000Z" ], [ "1970-01-01T12:05:27Z", "1970-01-01T12:05:27.000Z" ], [ "1970-01-01 12:05:27Z", "1970-01-01T12:05:27.000Z" ], [ "1970-1-1Z", "1970-01-01T00:00:00.000Z" ], [ "1221-02-28T23:59:59", "1221-02-28T23:59:59.000Z" ], [ "1221-02-28T23:59:59Z", "1221-02-28T23:59:59.000Z" ], [ "1221-02-28 23:59:59Z", "1221-02-28T23:59:59.000Z" ], [ "1221-02-28", "1221-02-28T00:00:00.000Z" ], [ "1221-02-28Z", "1221-02-28T00:00:00.000Z" ], [ "1221-2-28Z", "1221-02-28T00:00:00.000Z" ], [ "1000-12-24T04:12:00Z", "1000-12-24T04:12:00.000Z" ], [ "1000-12-24Z", "1000-12-24T00:00:00.000Z" ], [ "1000-12-24 04:12:00Z", "1000-12-24T04:12:00.000Z" ], [ "6789-12-31T23:59:58.99Z", "6789-12-31T23:59:58.990Z" ], [ "6789-12-31Z", "6789-12-31T00:00:00.000Z" ], [ "9999-12-31T23:59:59.999Z", "9999-12-31T23:59:59.999Z" ], [ "9999-12-31Z", "9999-12-31T00:00:00.000Z" ], [ "9999-12-31z", "9999-12-31T00:00:00.000Z" ], [ "9999-12-31", "9999-12-31T00:00:00.000Z" ], [ "2012Z", "2012-01-01T00:00:00.000Z" ], [ "2012z", "2012-01-01T00:00:00.000Z" ], [ "2012", "2012-01-01T00:00:00.000Z" ], [ "2012-2Z", "2012-02-01T00:00:00.000Z" ], [ "2012-1Z", "2012-01-01T00:00:00.000Z" ], [ "2012-1z", "2012-01-01T00:00:00.000Z" ], [ "2012-1-1z", "2012-01-01T00:00:00.000Z" ], [ "2012-01-01", "2012-01-01T00:00:00.000Z" ], [ "2012-01-01Z", "2012-01-01T00:00:00.000Z" ], [ "2012-01-01Z", "2012-01-01T00:00:00.000Z" ], [ "2012-01-02Z", "2012-01-02T00:00:00.000Z" ], [ "2012-01-2Z", "2012-01-02T00:00:00.000Z" ], [ " 2012-01-01Z", "2012-01-01T00:00:00.000Z" ], [ " 2012-01-01z", "2012-01-01T00:00:00.000Z" ], [ 1399395674000, "2014-05-06T17:01:14.000Z" ], [ 3600000, "1970-01-01T01:00:00.000Z" ], [ 7200000, "1970-01-01T02:00:00.000Z" ], [ 8200000, "1970-01-01T02:16:40.000Z" ], [ 61123, "1970-01-01T00:01:01.123Z" ], [ 60123, "1970-01-01T00:01:00.123Z" ], [ 2001, "1970-01-01T00:00:02.001Z" ], [ 2000, "1970-01-01T00:00:02.000Z" ], [ 1000, "1970-01-01T00:00:01.000Z" ], [ 121, "1970-01-01T00:00:00.121Z" ], [ 1, "1970-01-01T00:00:00.001Z" ], [ 0, "1970-01-01T00:00:00.000Z" ] ]; values.forEach(function (value) { var actual = getQueryResults("RETURN DATE_ISO8601(@value)", { value: value[0] }); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date_iso8601 function //////////////////////////////////////////////////////////////////////////////// testDateIso8601Alternative : function () { var values = [ [ [ 1000, 1, 1, 0, 0, 0, 0 ], "1000-01-01T00:00:00.000Z" ], [ [ 9999, 12, 31, 23, 59, 59, 999 ], "9999-12-31T23:59:59.999Z" ], [ [ 2012, 1, 1, 13, 12, 14, 95 ], "2012-01-01T13:12:14.095Z" ], [ [ 1234, 12, 31, 23, 59, 59, 477 ], "1234-12-31T23:59:59.477Z" ], [ [ 2014, 5, 7, 12, 6 ], "2014-05-07T12:06:00.000Z" ], [ [ 2014, 5, 7, 12 ], "2014-05-07T12:00:00.000Z" ], [ [ 2014, 5, 7 ], "2014-05-07T00:00:00.000Z" ], [ [ 2014, 5, 7 ], "2014-05-07T00:00:00.000Z" ], [ [ 1000, 1, 1 ], "1000-01-01T00:00:00.000Z" ], [ [ "1000", "01", "01", "00", "00", "00", "00" ], "1000-01-01T00:00:00.000Z" ], [ [ "1000", "1", "1", "0", "0", "0", "0" ], "1000-01-01T00:00:00.000Z" ], [ [ "9999", "12", "31", "23", "59", "59", "999" ], "9999-12-31T23:59:59.999Z" ], [ [ "2012", "1", "1", "13", "12", "14", "95" ], "2012-01-01T13:12:14.095Z" ], [ [ "1234", "12", "31", "23", "59", "59", "477" ], "1234-12-31T23:59:59.477Z" ], [ [ "2014", "05", "07", "12", "06" ], "2014-05-07T12:06:00.000Z" ], [ [ "2014", "5", "7", "12", "6" ], "2014-05-07T12:06:00.000Z" ], [ [ "2014", "5", "7", "12" ], "2014-05-07T12:00:00.000Z" ], [ [ "2014", "5", "7" ], "2014-05-07T00:00:00.000Z" ], [ [ "2014", "5", "7" ], "2014-05-07T00:00:00.000Z" ], [ [ "1000", "01", "01" ], "1000-01-01T00:00:00.000Z" ], [ [ "1000", "1", "1" ], "1000-01-01T00:00:00.000Z" ], ]; values.forEach(function (value) { var query = "RETURN DATE_ISO8601(" + value[0].map(function(v) { return JSON.stringify(v); }).join(", ") + ")"; var actual = getQueryResults(query); assertEqual([ value[1] ], actual); }); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date transformations //////////////////////////////////////////////////////////////////////////////// testDateTransformations1 : function () { var dt = "2014-05-07T15:23:21.446"; var actual; actual = getQueryResults("RETURN DATE_TIMESTAMP(DATE_YEAR(@value), DATE_MONTH(@value), DATE_DAY(@value), DATE_HOUR(@value), DATE_MINUTE(@value), DATE_SECOND(@value), DATE_MILLISECOND(@value))", { value: dt }); assertEqual([ new Date(dt).getTime() ], actual); actual = getQueryResults("RETURN DATE_TIMESTAMP(DATE_YEAR(@value), DATE_MONTH(@value), DATE_DAY(@value), DATE_HOUR(@value), DATE_MINUTE(@value), DATE_SECOND(@value), DATE_MILLISECOND(@value))", { value: dt + "Z" }); assertEqual([ new Date(dt).getTime() ], actual); }, //////////////////////////////////////////////////////////////////////////////// /// @brief test date transformations //////////////////////////////////////////////////////////////////////////////// testDateTransformations2 : function () { var dt = "2014-05-07T15:23:21.446"; var actual; actual = getQueryResults("RETURN DATE_ISO8601(DATE_TIMESTAMP(DATE_YEAR(@value), DATE_MONTH(@value), DATE_DAY(@value), DATE_HOUR(@value), DATE_MINUTE(@value), DATE_SECOND(@value), DATE_MILLISECOND(@value)))", { value: dt }); assertEqual([ dt + "Z" ], actual); actual = getQueryResults("RETURN DATE_ISO8601(DATE_TIMESTAMP(DATE_YEAR(@value), DATE_MONTH(@value), DATE_DAY(@value), DATE_HOUR(@value), DATE_MINUTE(@value), DATE_SECOND(@value), DATE_MILLISECOND(@value)))", { value: dt + "Z" }); assertEqual([ dt + "Z" ], actual); } }; } //////////////////////////////////////////////////////////////////////////////// /// @brief executes the test suite //////////////////////////////////////////////////////////////////////////////// jsunity.run(ahuacatlDateFunctionsTestSuite); return jsunity.done(); // Local Variables: // mode: outline-minor // outline-regexp: "^\\(/// @brief\\|/// @addtogroup\\|// --SECTION--\\|/// @page\\|/// @}\\)" // End: