#!/bin/bash

# This file is part of util-linux.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

TS_TOPDIR="${0%/*}/../.."
TS_DESC="Year 2147483646"

. $TS_TOPDIR/functions.sh
ts_init "$*"

ts_check_test_command "$TS_CMD_CAL"

export TERM=linux

USETERM=$( ts_has_option "useterm" "$*" )
MYMONTH="12 2147483646"
MYYEAR="2147483646"


CAL_TEST_TIME=1516562739  # 21st January 2018
export CAL_TEST_TIME

function call_cal {
	local testname=$(echo "$2" | sed 's/-//g')

	if [ "$3" == "$MYYEAR" ]; then
		testname="${testname}-year"
	else
		testname="${testname}-month"
	fi

	ts_init_subtest "$testname"
	ts_log "$1"
	shift
	if [ "$USETERM" == "yes" ]; then
		$TS_HELPER_CAL "$@"
	fi
	$TS_HELPER_CAL "$@" >> $TS_OUTPUT
	ts_finalize_subtest
}

call_cal "Gregorian - Monday-based month" -1m $MYMONTH
call_cal "Gregorian - Sunday-based month" -1s $MYMONTH
call_cal "Julian    - Monday-based month" -1mj $MYMONTH
call_cal "Julian    - Sunday-based month" -1sj $MYMONTH

call_cal "Gregorian - Monday-based 3 months" -3m $MYMONTH
call_cal "Gregorian - Sunday-based 3 months" -3s $MYMONTH
call_cal "Julian    - Monday-based 3 months" -3mj $MYMONTH
call_cal "Julian    - Sunday-based 3 months" -3sj $MYMONTH

call_cal "Gregorian - Monday-based year" -1m $MYYEAR
call_cal "Gregorian - Sunday-based year" -1s $MYYEAR
call_cal "Julian    - Monday-based year" -1mj $MYYEAR
call_cal "Julian    - Sunday-based year" -1sj $MYYEAR


call_cal "Gregorian - Monday-based month with weeks" -1mw $MYMONTH
call_cal "Gregorian - Sunday-based month with weeks" -1sw $MYMONTH
call_cal "Julian    - Monday-based month with weeks" -1mjw $MYMONTH
call_cal "Julian    - Sunday-based month with weeks" -1sjw $MYMONTH

call_cal "Gregorian - Monday-based 3 months with weeks" -3mw $MYMONTH
call_cal "Gregorian - Sunday-based 3 months with weeks" -3sw $MYMONTH
call_cal "Julian    - Monday-based 3 months with weeks" -3mjw $MYMONTH
call_cal "Julian    - Sunday-based 3 months with weeks" -3sjw $MYMONTH

call_cal "Gregorian - Monday-based year with weeks" -1mw $MYYEAR
call_cal "Gregorian - Sunday-based year with weeks" -1sw $MYYEAR
call_cal "Julian    - Monday-based year with weeks" -1mjw $MYYEAR
call_cal "Julian    - Sunday-based year with weeks" -1sjw $MYYEAR

ts_finalize
