#!/bin/sh
######################################################
#
# Test UTF-8 body along with an attachment
#
######################################################

set -e

if test -z "${MH_OBJ_DIR}"; then
    srcdir=`dirname "$0"`/../..
    MH_OBJ_DIR=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
fi

. "${MH_OBJ_DIR}/test/common.sh"

setup_test
testname="${MH_TEST_DIR}/$$"
expected="$MH_TEST_DIR/$$.expected"
actual="$MH_TEST_DIR/$$.actual"

LC_ALL=en_US.UTF-8; export LC_ALL

#### Rely on sendmail/pipe below to override default mts.
mts_fakesendmail="${MHMTSCONF}-fakesendmail"
cp "${MHMTSCONF}" "$mts_fakesendmail"
printf 'sendmail: %s/test/fakesendmail\n' "$srcdir" >>"$mts_fakesendmail"
MHMTSCONF="$mts_fakesendmail"

# argument: expected output
test_attachment ()
{
  run_prog send -draft -mts sendmail/pipe

  # fakesendmail drops the message and any cc's into this mbox.
  mbox="${MH_TEST_DIR}"/Mail/fakesendmail.mbox
  inc -silent -file "$mbox"
  rm -f "$mbox" "$mbox.map"

  #
  # It's hard to calculate the exact Date: header post is going to
  # use, so we'll just use sed to remove the actual date so we can easily
  # compare it against our "correct" output.  And same for charset.
  #
  sed -e 's/^Date:.*/Date:/' -e 's/; charset="[^;]*//' \
      "`mhpath cur`" > "${testname}.actual"

  check "${testname}.actual" "$1"
}

# check that 7-bit body isn't encoded
cat > "${MH_TEST_DIR}/attachment.txt" <<EOF
this is an attachment
EOF

cat > "${MH_TEST_DIR}/Mail/draft" <<EOF
From: Mr Nobody <nobody@example.com>
To: Somebody <somebody@example.com>
Subject: Test
Attach: $MH_TEST_DIR/attachment.txt

This is a test.
EOF

cat > "${testname}.expected" <<EOF
From: Mr Nobody <nobody@example.com>
To: Somebody <somebody@example.com>
Subject: Test
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
Date:

------- =_aaaaaaaaaa0
Content-Type: text/plain

This is a test.

------- =_aaaaaaaaaa0
Content-Type: text/plain; name="attachment.txt"
Content-Description: attachment.txt
Content-Disposition: attachment; filename="attachment.txt"

this is an attachment

------- =_aaaaaaaaaa0--
EOF

test_attachment "${testname}.expected"

# check that 8-bit body is encoded as quoted-printable text/plain,
# even with an attachment

cat > "${MH_TEST_DIR}/Mail/draft" <<EOF
From: Mr Nobody <nobody@example.com>
To: Somebody <somebody@example.com>
Subject: Test
Attach: $MH_TEST_DIR/attachment.txt

¡Ay, caramba!
EOF

cat > "${testname}.expected" <<EOF
From: Mr Nobody <nobody@example.com>
To: Somebody <somebody@example.com>
Subject: Test
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
Content-Transfer-Encoding: 8bit
Date:

------- =_aaaaaaaaaa0
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

¡Ay, caramba!

------- =_aaaaaaaaaa0
Content-Type: text/plain; name="attachment.txt"
Content-Description: attachment.txt
Content-Disposition: attachment; filename="attachment.txt"

this is an attachment

------- =_aaaaaaaaaa0--
EOF

test_attachment "${testname}.expected"

# Repeat the previous test, but make sure that the locale is set to C, which 
# should cause mhbuild to fail

cat > "${MH_TEST_DIR}/Mail/draft" <<EOF
From: Mr Nobody <nobody@example.com>
To: Somebody <somebody@example.com>
Subject: Test
Attach: $MH_TEST_DIR/attachment.txt

¡Ay, caramba!
EOF

LC_ALL="C"; export LC_ALL

set +e
run_prog send -draft -mts sendmail/pipe > "$actual" 2>&1
set -e

cat > "$expected" <<EOF
mhbuild: Text content contains 8 bit characters, but character set is US-ASCII
${MH_INST_DIR}${bindir}/mhbuild: exit 1
EOF

check "$expected" "$actual"

rm -f ${MHMTSCONF} "${MH_TEST_DIR}/attachment.txt"

exit ${failed:-0}

# emacs hackage to ensure that it writes the inverted exclamation
# point as UTF-8 multibyte character \xC2\xA1 instead of just \xA1.
# Local Variables:
# coding: utf-8
# End:
