xref: /freebsd/bin/date/tests/format_string_test.sh (revision eeb04a736cb9c07d191af886e25d5f198824658e)
19f312407SEnji Cooper#
29f312407SEnji Cooper# Regression tests for date(1)
39f312407SEnji Cooper#
49f312407SEnji Cooper# Submitted by Edwin Groothuis <edwin@FreeBSD.org>
59f312407SEnji Cooper#
69f312407SEnji Cooper#
79f312407SEnji Cooper
89f312407SEnji Cooper#
99f312407SEnji Cooper# These two date/times have been chosen carefully -- they
109f312407SEnji Cooper# create both the single digit and double/multidigit version of
119f312407SEnji Cooper# the values.
129f312407SEnji Cooper#
139f312407SEnji Cooper# To create a new one, make sure you are using the UTC timezone!
149f312407SEnji Cooper#
159f312407SEnji Cooper
169f312407SEnji CooperTEST1=3222243		# 1970-02-07 07:04:03
179f312407SEnji CooperTEST2=1005600000	# 2001-11-12 21:11:12
189f312407SEnji Cooper
199f312407SEnji Coopercheck()
209f312407SEnji Cooper{
219f312407SEnji Cooper	local format_string exp_output_1 exp_output_2
229f312407SEnji Cooper
239f312407SEnji Cooper	format_string=${1}
249f312407SEnji Cooper	exp_output_1=${2}
259f312407SEnji Cooper	exp_output_2=${3}
269f312407SEnji Cooper
279f312407SEnji Cooper	atf_check -o "inline:${exp_output_1}\n" \
289f312407SEnji Cooper	    date -r ${TEST1} +%${format_string}
299f312407SEnji Cooper	atf_check -o "inline:${exp_output_2}\n" \
309f312407SEnji Cooper	    date -r ${TEST2} +%${format_string}
319f312407SEnji Cooper}
329f312407SEnji Cooper
33*eeb04a73SMateusz Piotrowskiatf_test_case flag_r_file_test
34*eeb04a73SMateusz Piotrowskiflag_r_file_test_body()
35*eeb04a73SMateusz Piotrowski{
36*eeb04a73SMateusz Piotrowski	local file
37*eeb04a73SMateusz Piotrowski
38*eeb04a73SMateusz Piotrowski	file="./testfile"
39*eeb04a73SMateusz Piotrowski	touch "$file"
40*eeb04a73SMateusz Piotrowski	atf_check -o "inline:$(stat -f '%9Fm' "$file")\n" \
41*eeb04a73SMateusz Piotrowski		date -r "$file" +%s.%N
42*eeb04a73SMateusz Piotrowski}
43*eeb04a73SMateusz Piotrowski
449f312407SEnji Cooperformat_string_test()
459f312407SEnji Cooper{
469f312407SEnji Cooper	local desc exp_output_1 exp_output_2 flag
479f312407SEnji Cooper
489f312407SEnji Cooper	desc=${1}
499f312407SEnji Cooper	flag=${2}
509f312407SEnji Cooper	exp_output_1=${3}
519f312407SEnji Cooper	exp_output_2=${4}
529f312407SEnji Cooper
539f312407SEnji Cooper	atf_test_case ${desc}_test
549f312407SEnji Cooper	eval "
559f312407SEnji Cooper${desc}_test_body() {
569f312407SEnji Cooper	check ${flag} '${exp_output_1}' '${exp_output_2}';
579f312407SEnji Cooper}"
589f312407SEnji Cooper	atf_add_test_case ${desc}_test
599f312407SEnji Cooper}
609f312407SEnji Cooper
612c77ec54SConrad Meyeriso8601_check()
622c77ec54SConrad Meyer{
632c77ec54SConrad Meyer	local arg flags exp_output_1 exp_output_2
642c77ec54SConrad Meyer
652c77ec54SConrad Meyer	arg="${1}"
662c77ec54SConrad Meyer	flags="${2}"
672c77ec54SConrad Meyer	exp_output_1="${3}"
682c77ec54SConrad Meyer	exp_output_2="${4}"
692c77ec54SConrad Meyer
702c77ec54SConrad Meyer	atf_check -o "inline:${exp_output_1}\n" \
712c77ec54SConrad Meyer	    date $flags -r ${TEST1} "-I${arg}"
722c77ec54SConrad Meyer	atf_check -o "inline:${exp_output_2}\n" \
732c77ec54SConrad Meyer	    date $flags -r ${TEST2} "-I${arg}"
742c77ec54SConrad Meyer}
752c77ec54SConrad Meyer
762c77ec54SConrad Meyeriso8601_string_test()
772c77ec54SConrad Meyer{
782c77ec54SConrad Meyer	local desc arg exp_output_1 exp_output_2 flags
792c77ec54SConrad Meyer
802c77ec54SConrad Meyer	desc="${1}"
812c77ec54SConrad Meyer	arg="${2}"
822c77ec54SConrad Meyer	flags="${3}"
832c77ec54SConrad Meyer	exp_output_1="${4}"
842c77ec54SConrad Meyer	exp_output_2="${5}"
852c77ec54SConrad Meyer
862c77ec54SConrad Meyer	atf_test_case iso8601_${desc}_test
872c77ec54SConrad Meyer	eval "
882c77ec54SConrad Meyeriso8601_${desc}_test_body() {
892c77ec54SConrad Meyer	iso8601_check '${arg}' '${flags}' '${exp_output_1}' '${exp_output_2}'
902c77ec54SConrad Meyer}"
912c77ec54SConrad Meyer	atf_add_test_case iso8601_${desc}_test
922c77ec54SConrad Meyer
932c77ec54SConrad Meyer	if [ -z "$flags" ]; then
942c77ec54SConrad Meyer	    atf_test_case iso8601_${desc}_parity
952c77ec54SConrad Meyer	    eval "
962c77ec54SConrad Meyeriso8601_${desc}_parity_body() {
972c77ec54SConrad Meyer	local exp1 exp2
982c77ec54SConrad Meyer
992c77ec54SConrad Meyer	atf_require_prog gdate
1002c77ec54SConrad Meyer
1012c77ec54SConrad Meyer	exp1=\"\$(gdate --date '@${TEST1}' '-I${arg}')\"
1022c77ec54SConrad Meyer	exp2=\"\$(gdate --date '@${TEST2}' '-I${arg}')\"
1032c77ec54SConrad Meyer
1042c77ec54SConrad Meyer	iso8601_check '${arg}' '' \"\${exp1}\" \"\${exp2}\"
1052c77ec54SConrad Meyer}"
1062c77ec54SConrad Meyer	    atf_add_test_case iso8601_${desc}_parity
1072c77ec54SConrad Meyer	fi
1082c77ec54SConrad Meyer}
1092c77ec54SConrad Meyer
1109f312407SEnji Cooperatf_init_test_cases()
1119f312407SEnji Cooper{
112*eeb04a73SMateusz Piotrowski	atf_add_test_case flag_r_file_test
113*eeb04a73SMateusz Piotrowski
1149f312407SEnji Cooper	format_string_test A A Saturday Monday
1159f312407SEnji Cooper	format_string_test a a Sat Mon
1169f312407SEnji Cooper	format_string_test B B February November
1179f312407SEnji Cooper	format_string_test b b Feb Nov
1189f312407SEnji Cooper	format_string_test C C 19 20
1199f312407SEnji Cooper	format_string_test c c "Sat Feb  7 07:04:03 1970" "Mon Nov 12 21:20:00 2001"
1209f312407SEnji Cooper	format_string_test D D 02/07/70 11/12/01
1219f312407SEnji Cooper	format_string_test d d 07 12
1229f312407SEnji Cooper	format_string_test e e " 7" 12
1239f312407SEnji Cooper	format_string_test F F "1970-02-07" "2001-11-12"
1249f312407SEnji Cooper	format_string_test G G 1970 2001
1259f312407SEnji Cooper	format_string_test g g 70 01
1269f312407SEnji Cooper	format_string_test H H 07 21
1279f312407SEnji Cooper	format_string_test h h Feb Nov
1289f312407SEnji Cooper	format_string_test I I 07 09
1299f312407SEnji Cooper	format_string_test j j 038 316
1309f312407SEnji Cooper	format_string_test k k " 7" 21
1319f312407SEnji Cooper	format_string_test l l " 7" " 9"
1329f312407SEnji Cooper	format_string_test M M 04 20
1339f312407SEnji Cooper	format_string_test m m 02 11
134*eeb04a73SMateusz Piotrowski	format_string_test N N 000000000 000000000
1359f312407SEnji Cooper	format_string_test p p AM PM
1369f312407SEnji Cooper	format_string_test R R 07:04 21:20
1379f312407SEnji Cooper	format_string_test r r "07:04:03 AM" "09:20:00 PM"
1389f312407SEnji Cooper	format_string_test S S 03 00
1399f312407SEnji Cooper	format_string_test s s ${TEST1} ${TEST2}
1409f312407SEnji Cooper	format_string_test U U 05 45
1419f312407SEnji Cooper	format_string_test u u 6 1
1429f312407SEnji Cooper	format_string_test V V 06 46
1439f312407SEnji Cooper	format_string_test v v " 7-Feb-1970" "12-Nov-2001"
1449f312407SEnji Cooper	format_string_test W W 05 46
1459f312407SEnji Cooper	format_string_test w w 6 1
1469f312407SEnji Cooper	format_string_test X X "07:04:03" "21:20:00"
1479f312407SEnji Cooper	format_string_test x x "02/07/70" "11/12/01"
1489f312407SEnji Cooper	format_string_test Y Y 1970 2001
1499f312407SEnji Cooper	format_string_test y y 70 01
1509f312407SEnji Cooper	format_string_test Z Z UTC UTC
1519f312407SEnji Cooper	format_string_test z z +0000 +0000
1529f312407SEnji Cooper	format_string_test percent % % %
1539f312407SEnji Cooper	format_string_test plus + "Sat Feb  7 07:04:03 UTC 1970" "Mon Nov 12 21:20:00 UTC 2001"
1542c77ec54SConrad Meyer
1552c77ec54SConrad Meyer	iso8601_string_test default "" "" "1970-02-07" "2001-11-12"
1562c77ec54SConrad Meyer	iso8601_string_test date date "" "1970-02-07" "2001-11-12"
1572c77ec54SConrad Meyer	iso8601_string_test hours hours "" "1970-02-07T07+00:00" "2001-11-12T21+00:00"
1582c77ec54SConrad Meyer	iso8601_string_test minutes minutes "" "1970-02-07T07:04+00:00" "2001-11-12T21:20+00:00"
1592c77ec54SConrad Meyer	iso8601_string_test seconds seconds "" "1970-02-07T07:04:03+00:00" "2001-11-12T21:20:00+00:00"
160*eeb04a73SMateusz Piotrowski	iso8601_string_test ns ns "" "1970-02-07T07:04:03,000000000+00:00" "2001-11-12T21:20:00,000000000+00:00"
1619f312407SEnji Cooper}
162