#!/bin/bash
# test for ISOs which follow Annex G of EXIF 2.3 spec, i.e. ISOs,
# which cannot be represented by Exif.Photo.ISOSpeedRatings due to
# being larger than 65k

# All tests use the summary view as a result-check, because it uses
# the isoSpeed() "easyaccess" function, which handles the higher ISO
# readout.
#
# Tests getting executed:
# 

source ./functions.source

(	cd "$testdir"

	num=0001
	# Checks for old way of ISO readout based on the 16bit value
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to something <65k
	# output:
	# - value of Exif.Photo.ISOSpeedRatings
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 60001'            $filename
	runTest exiv2 -ps                                                 $filename

	num=0002
	# Old ISO is read out first, so if it doesn't indicate that
	# some higher ISO is used, the 16bit value should be returned,
	# ignoring the other tags (for now)
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to something <65k
	# - Exif.Photo.SensitivityType being set to "REI"
	# - Exif.Photo.RecommendedExposureIndex being set to != ISOSpeedRatings
	# output:
	# - value of Exif.Photo.ISOSpeedRatings
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 60002'            $filename
	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 444444'  $filename
	runTest exiv2 -ps                                                 $filename

	num=0003
	# Corner case check (highest ISO value not indicating possible
	# 16bit overflow in ISO)
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to 65534
	# output:
	# - value of Exif.Photo.ISOSpeedRatings
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65534'            $filename
	runTest exiv2 -ps                                                 $filename

	num=0004
	# Corner case check (ISO value indicating possible overflow,
	# but no additional informations available)
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to 65535
	# - Exif.Photo.SensitivityType NOT SET
	# output:
	# - value of Exif.Photo.ISOSpeedRatings
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
	runTest exiv2 -ps                                                 $filename

	num=0005
	# possible ISO value overflow, but additional information not valid
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to 65535
	# - Exif.Photo.SensitivityType being set to 0
	# output:
	# - value of Exif.Photo.ISOSpeedRatings
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
	runTest exiv2 -M'set Exif.Photo.SensitivityType 0'                $filename
	runTest exiv2 -ps                                                 $filename

	num=0006
	# possible ISO value overflow, but additional information not valid
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to 65535
	# - Exif.Photo.SensitivityType being set to 8
	# output:
	# - value of Exif.Photo.ISOSpeedRatings
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
	runTest exiv2 -M'set Exif.Photo.SensitivityType 8'                $filename
	runTest exiv2 -ps                                                 $filename

	num=0007
	# possible ISO value overflow, but additional information partially valid
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to 65535
	# - Exif.Photo.SensitivityType being set to 2 ("REI")
	# - Exif.Photo.RecommendedExposureIndex NOT SET
	# output:
	# - value of Exif.Photo.ISOSpeedRatings
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
	runTest exiv2 -ps                                                 $filename

	num=0008
	# ISO value overflow, REI contains same value as 16bit ISO, though
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to 65535
	# - Exif.Photo.SensitivityType being set to 2 ("REI")
	# - Exif.Photo.RecommendedExposureIndex set to 65530
	# output:
	# - value of Exif.Photo.RecommendedExposureIndex
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 65530'   $filename
	runTest exiv2 -ps                                                 $filename

	num=0009
	# ISO value overflow, REI contains 16bit ISO value +1
	# input:
	# - Exif.Photo.ISOSpeedRatings being set to 65535
	# - Exif.Photo.SensitivityType being set to 2 ("REI")
	# - Exif.Photo.RecommendedExposureIndex set to 65536
	# output:
	# - value of Exif.Photo.RecommendedExposureIndex
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.ISOSpeedRatings 65535'            $filename
	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 65536'   $filename
	runTest exiv2 -ps                                                 $filename

	num=0010
	# old ISO not set
	# input:
	# - Exif.Photo.ISOSpeedRatings is NOT SET
	# - Exif.Photo.SensitivityType being set to 2 ("REI")
	# - Exif.Photo.RecommendedExposureIndex set to <65k
	# output:
	# - value of Exif.Photo.RecommendedExposureIndex
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 60010'   $filename
	runTest exiv2 -ps                                                 $filename

	num=0011
	# old ISO not set
	# input:
	# - Exif.Photo.ISOSpeedRatings is NOT SET
	# - Exif.Photo.SensitivityType being set to 2 ("REI")
	# - Exif.Photo.RecommendedExposureIndex set to >65k
	# output:
	# - value of Exif.Photo.RecommendedExposureIndex
	echo '------>' iso65k test $num '<-------' >&2
	filename=exiv2-iso65k-$num.jpg
	copyTestFile exiv2-empty.jpg $filename
	runTest exiv2 -M'set Exif.Photo.SensitivityType 2'                $filename
	runTest exiv2 -M'set Exif.Photo.RecommendedExposureIndex 100011'  $filename
	runTest exiv2 -ps                                                 $filename

) > $testdir/iso65k-test.out 2>&1

reportTest
