#!/bin/bash
# Copyright 2022 Google LLC
#
# 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.
# ------------------------------------------------------------------------------
#
# tests for command lines

set -ex

if [[ "$#" -ge 1 ]]; then
  # eval so that the passed in directory can contain variables.
  BINARY_DIR="$(eval echo "$1")"
else
  # assume "tests" is the current directory
  BINARY_DIR=..
fi
if [[ "$#" -ge 2 ]]; then
  TESTDATA_DIR="$(eval echo "$2")"
else
  TESTDATA_DIR=./data
fi

AVIFENC="${BINARY_DIR}/avifenc"
AVIFDEC="${BINARY_DIR}/avifdec"
ARE_IMAGES_EQUAL="${BINARY_DIR}/tests/are_images_equal"
ENCODED_FILE=/tmp/avif_test_cmd_encoded.avif
ENCODED_FILE_NO_METADATA=/tmp/avif_test_cmd_encoded_no_metadata.avif
ENCODED_FILE_WITH_DASH=-avif_test_cmd_encoded.avif
DECODED_FILE=/tmp/avif_test_cmd_decoded.png
PNG_FILE=/tmp/avif_test_cmd_kodim03.png

# Prepare some extra data.
set +x
echo "Generating a color PNG"
"${AVIFENC}" -s 10 "${TESTDATA_DIR}/kodim03_yuv420_8bpc.y4m" -o "${ENCODED_FILE}" > /dev/null
"${AVIFDEC}" "${ENCODED_FILE}" "${PNG_FILE}" > /dev/null
set -x

# Basic calls.
"${AVIFENC}" --version
"${AVIFDEC}" --version

# Lossless test.
echo "Testing basic lossless"
"${AVIFENC}" -s 10 -l "${PNG_FILE}" -o "${ENCODED_FILE}"
"${AVIFDEC}" "${ENCODED_FILE}" "${DECODED_FILE}"
"${ARE_IMAGES_EQUAL}" "${PNG_FILE}" "${DECODED_FILE}" 0

# Metadata test.
echo "Testing metadata enc/dec"
# PNG.
"${AVIFENC}" "${TESTDATA_DIR}/paris_icc_exif_xmp.png" -o "${ENCODED_FILE}"
"${AVIFENC}" "${TESTDATA_DIR}/paris_icc_exif_xmp.png" -o "${ENCODED_FILE_NO_METADATA}" --ignore-icc
cmp "${ENCODED_FILE}" "${ENCODED_FILE_NO_METADATA}" && exit 1
"${AVIFENC}" "${TESTDATA_DIR}/paris_icc_exif_xmp.png" -o "${ENCODED_FILE_NO_METADATA}" --ignore-exif
cmp "${ENCODED_FILE}" "${ENCODED_FILE_NO_METADATA}" && exit 1
"${AVIFENC}" "${TESTDATA_DIR}/paris_icc_exif_xmp.png" -o "${ENCODED_FILE_NO_METADATA}" --ignore-xmp
cmp "${ENCODED_FILE}" "${ENCODED_FILE_NO_METADATA}" && exit 1
# JPEG.
"${AVIFENC}" "${TESTDATA_DIR}/paris_exif_xmp_icc.jpg" -o "${ENCODED_FILE}"
"${AVIFENC}" "${TESTDATA_DIR}/paris_exif_xmp_icc.jpg" -o "${ENCODED_FILE_NO_METADATA}" --ignore-icc
cmp "${ENCODED_FILE}" "${ENCODED_FILE_NO_METADATA}" && exit 1
"${AVIFENC}" "${TESTDATA_DIR}/paris_exif_xmp_icc.jpg" -o "${ENCODED_FILE_NO_METADATA}" --ignore-exif
cmp "${ENCODED_FILE}" "${ENCODED_FILE_NO_METADATA}" && exit 1
"${AVIFENC}" "${TESTDATA_DIR}/paris_exif_xmp_icc.jpg" -o "${ENCODED_FILE_NO_METADATA}" --ignore-xmp
cmp "${ENCODED_FILE}" "${ENCODED_FILE_NO_METADATA}" && exit 1

# Argument parsing test with filenames starting with a dash.
"${AVIFENC}" -s 10 "${PNG_FILE}" -- "${ENCODED_FILE_WITH_DASH}"
"${AVIFDEC}" --info  -- "${ENCODED_FILE_WITH_DASH}"
# Passing a filename starting with a dash without using -- should fail.
set +e
"${AVIFENC}" -s 10 "${PNG_FILE}" "${ENCODED_FILE_WITH_DASH}"
if [[ $? -ne 1 ]]; then
  echo "Argument parsing should fail for avifenc"
  exit 1
fi
"${AVIFDEC}" --info "${ENCODED_FILE_WITH_DASH}"
if [[ $? -ne 1 ]]; then
  echo "Argument parsing should fail for avifdec"
  exit 1
fi
set -e
rm -- "${ENCODED_FILE_WITH_DASH}"

# Test code that should fail.
set +e
"${ARE_IMAGES_EQUAL}" "${TESTDATA_DIR}/kodim23_yuv420_8bpc.y4m" "${DECODED_FILE}" 0
if [[ $? -ne 1 ]]; then
  echo "Image should be different"

  # Cleanup
  rm "${ENCODED_FILE}" "${ENCODED_FILE_NO_METADATA}" "${DECODED_FILE}" "${PNG_FILE}"
  exit 1
fi

echo "TEST OK"

# Cleanup
rm "${ENCODED_FILE}" "${ENCODED_FILE_NO_METADATA}" "${DECODED_FILE}" "${PNG_FILE}"

exit 0
