068557b06c
- Added read_image_as_data_uri() function to base64_util for reading, validating, and base64-encoding image files - Added -i CLI flag to accept image file paths (multiple allowed) - Added -I debug flag for testing image file reading - Image files are validated at startup with clear error messages for missing or unreadable files - Updated help text and README.md documentation - Added test_image_flag.sh with tests for PNG, JPEG, GIF formats, error cases, and multiple -i flags
59 lines
3.1 KiB
Bash
59 lines
3.1 KiB
Bash
#!/bin/bash
|
|
# test_image_flag.sh - Tests for -i CLI flag with image file reading
|
|
|
|
# Test 1: Nonexistent file produces clear error and non-zero exit
|
|
OUTPUT=$("${DRHARNESS}" -I "nonexistent.png" 2>&1) || true
|
|
if ! echo "${OUTPUT}" | grep -q "Image file not found"; then
|
|
echo "FAIL: nonexistent file error - expected 'Image file not found', got '${OUTPUT}'"
|
|
exit 1
|
|
fi
|
|
|
|
# Test 2: Create a test image file and read it
|
|
# Create a minimal 1x1 PNG file
|
|
printf '\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90\x77\x53\xDE\x00\x00\x00\x0C\x49\x44\x41\x54\x08\xD7\x63\xF8\xCF\xC0\x00\x00\x03\x01\x01\x00\x18\xDD\x8D\xB4\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82' > "${TEST_TEMP_DIR}/test.png"
|
|
|
|
# Test 3: Valid PNG file is read and returns data URI
|
|
OUTPUT=$("${DRHARNESS}" -I "${TEST_TEMP_DIR}/test.png" 2>&1)
|
|
if ! echo "${OUTPUT}" | grep -q "^data:image/png;base64,"; then
|
|
echo "FAIL: valid PNG file - expected data URI starting with 'data:image/png;base64,', got '${OUTPUT}'"
|
|
exit 1
|
|
fi
|
|
|
|
# Test 4: Create a minimal JPEG file
|
|
printf '\xFF\xD8\xFF\xE0\x00\x10\x4A\x46\x49\x46\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xFF\xD9' > "${TEST_TEMP_DIR}/test.jpg"
|
|
|
|
# Test 5: Valid JPG file is read and returns correct data URI
|
|
OUTPUT=$("${DRHARNESS}" -I "${TEST_TEMP_DIR}/test.jpg" 2>&1)
|
|
if ! echo "${OUTPUT}" | grep -q "^data:image/jpeg;base64,"; then
|
|
echo "FAIL: valid JPG file - expected data URI starting with 'data:image/jpeg;base64,', got '${OUTPUT}'"
|
|
exit 1
|
|
fi
|
|
|
|
# Test 6: Create a GIF file
|
|
printf '\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\xFF\xFF\xFF\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3B' > "${TEST_TEMP_DIR}/test.gif"
|
|
|
|
# Test 7: Valid GIF file is read and returns correct data URI
|
|
OUTPUT=$("${DRHARNESS}" -I "${TEST_TEMP_DIR}/test.gif" 2>&1)
|
|
if ! echo "${OUTPUT}" | grep -q "^data:image/gif;base64,"; then
|
|
echo "FAIL: valid GIF file - expected data URI starting with 'data:image/gif;base64,', got '${OUTPUT}'"
|
|
exit 1
|
|
fi
|
|
|
|
# Test 8: Not a file (directory) produces error
|
|
mkdir -p "${TEST_TEMP_DIR}/not_a_file"
|
|
OUTPUT=$("${DRHARNESS}" -I "${TEST_TEMP_DIR}/not_a_file" 2>&1) || true
|
|
if ! echo "${OUTPUT}" | grep -q "Not a regular file"; then
|
|
echo "FAIL: directory error - expected 'Not a regular file', got '${OUTPUT}'"
|
|
exit 1
|
|
fi
|
|
|
|
# Test 9: Multiple images - second file nonexistent should produce error
|
|
printf '\x89\x50\x4E\x47\x0D\x0A\x1A\x0A\x00\x00\x00\x0D\x49\x48\x44\x52\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90\x77\x53\xDE\x00\x00\x00\x0C\x49\x44\x41\x54\x08\xD7\x63\xF8\xCF\xC0\x00\x00\x03\x01\x01\x00\x18\xDD\x8D\xB4\x00\x00\x00\x00\x49\x45\x4E\x44\xAE\x42\x60\x82' > "${TEST_TEMP_DIR}/valid.png"
|
|
OUTPUT=$("${DRHARNESS}" -i "${TEST_TEMP_DIR}/valid.png" -i "nonexistent.png" -F "${TEST_TEMP_DIR}/chat.json" -n -m "test" 2>&1) || true
|
|
if ! echo "${OUTPUT}" | grep -q "Image file not found"; then
|
|
echo "FAIL: multiple images with nonexistent second file - expected error, got '${OUTPUT}'"
|
|
exit 1
|
|
fi
|
|
|
|
echo "All image flag tests passed"
|