setup_test
-check_exit '-eq 1' mhical - # gcov
+check_exit '-eq 1' mhical -
#### Make sure that html-to-text conversion is what we expect.
require_locale en_US.UTF-8 en_US.UTF8 en_US.utf-8 en_US.utf8
# check -help
+start_test "-help"
cat >"$expected" <<EOF
Usage: mhical [switches]
switches are:
EOF
#### Skip nmh intro text.
-run_prog mhical -help | sed '/^$/,$d' >"$actual" 2>&1
+run_prog mhical -help 2>&1 | sed '/^$/,$d' >"$actual"
check "$expected" "$actual"
# check -version
+start_test "-version"
case `mhical -version` in
mhical\ --*) ;;
*) printf '%s: mhical -version generated unexpected output\n' "$0" >&2
# check display with timezone that only has standard time
+start_test "display with timezone that only has standard time"
cat >"$expected" <<'EOF'
Summary: Santa Watch
Description: See Santa here first!
# check display with 24 hour time format and -outfile
+start_test "display with 24 hour time format and -outfile"
cat >"$expected" <<'EOF'
Summary: 4 pm meeting
At: Mon, 05 Jan 2015 16:00
# check display with 12 hour time format and -infile
+start_test "display with 12 hour time format and -infile"
cat >"$expected" <<'EOF'
Summary: 4 pm meeting
At: Mon, 05 Jan 2015 4:00 PM
# check display with DST
+start_test "display with DST"
cat >"$expected" <<'EOF'
Method: REQUEST
Organizer: Requester
# check timezone boundary at transition to daylight saving time
+start_test "timezone boundary at transition to daylight saving time"
# The default mhical display format doesn't show the timezone for the
# To: time, but it is different than that of the At: time.
cat >"$expected" <<'EOF'
# check -format, and that timezone is correct in end time
+start_test "-format, and that timezone is correct in end time"
cat >"$expected" <<'EOF'
Sun, 09 Mar 2014 03:30:00 -0400
EOF
# check timezone boundary at transition from daylight saving time
+start_test "timezone boundary at transition from daylight saving time"
cat >"$expected" <<'EOF'
Summary: EDT to EST
At: Sun, 02 Nov 2014 01:59 -0400
# check -format, and that timezone is correct in end time
+start_test "-format, and that timezone is correct in end time"
cat >"$expected" <<'EOF'
Sun, 02 Nov 2014 02:00:00 -0500
EOF
printf 'Local-Mailbox: Requestee2 <requestee2@example.com>\n' >> "$MH"
# check accept of request
+start_test "accept of request"
cat >"$expected" <<'EOF'
BEGIN:VCALENDAR
METHOD:REPLY
check "$expected" "$MH_TEST_DIR/test1.txt"
# check accept of multiple vevent requests in single vcalendar
+start_test "accept of multiple vevent requests in single vcalendar"
cat >"$expected" <<'EOF'
BEGIN:VCALENDAR
METHOD:REPLY
# check decline of request
+start_test "decline of request"
cat >"$expected" <<'EOF'
BEGIN:VCALENDAR
METHOD:REPLY
# check response of tentative to request, and -nocontenttype
+start_test "response of tentative to request, and -nocontenttype"
cat >"$expected" <<'EOF'
BEGIN:VCALENDAR
METHOD:REPLY
# check cancel request, and -contenttype
+start_test "cancel request, and -contenttype"
cat >"$expected" <<'EOF'
Content-Type: text/calendar; method="CANCEL"; charset="UTF-8"
# Check TZID name wrapped with quotes, this used to cause a segfault.
+start_test "TZID name wrapped with quotes, this used to cause a segfault."
cat >"$expected" <<'EOF'
Method: REQUEST
Summary: Quoted timezone ID
# Check start datetime without a time, and missing end datetime.
+start_test "start datetime without a time, and missing end datetime."
cat >"$expected" <<'EOF'
Method: PUBLISH
Summary: Test datetime without time
rm -f "$MH_TEST_DIR/test1.ics"
+# check missing final newline
+start_test "missing final newline"
+
+cat >"$expected" <<'EOF'
+Summary: test
+Description: this file does not end with a newline
+At: Sun, 14 May 2017 13:00 +0000
+To: Sun, 14 May 2017 14:00
+EOF
+
+printf %s \
+"BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:RevenueWell
+BEGIN:VEVENT
+DTSTAMP:20170514T122300Z
+DTSTART:20170514T130000Z
+DTEND:20170514T140000Z
+SUMMARY:test
+DESCRIPTION:this file does not end with a newline
+END:VEVENT
+END:VCALENDAR" | TZ=UTC mhical >"$actual"
+check "$expected" "$actual"
+
+
+# check invalid line folding
+start_test "invalid line folding"
+
+cat >"$expected" <<'EOF'
+Summary: test
+Description: this file does not end with a newline
+At: Sun, 14 May 2017 13:00 +0000
+To: Sun, 14 May 2017 14:00
+EOF
+
+cat >"$expected_err" <<'EOF'
+mhical: syntax error, unexpected ICAL_COMMA, expecting ICAL_COLON after " this line is not folded"
+EOF
+
+set +e
+printf %s \
+"BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//TDP v3.0//EN
+BEGIN:VEVENT
+DTSTAMP:20170514T122300Z
+DTSTART:20170514T130000Z
+DTEND:20170514T140000Z
+SUMMARY:test
+DESCRIPTION:this file does not end with a newline
+and this line is not folded,
+END:VEVENT
+END:VCALENDAR" | TZ=UTC mhical >"$actual" 2>"$actual_err"
+set -e
+check "$expected" "$actual"
+check "$expected_err" "$actual_err"
+
+
+# check null input
+start_test "null input"
+check_exit '-eq 0' mhical </dev/null
+
+
+finish_test
exit $failed