250 lines
7.3 KiB
Bash
Executable File
250 lines
7.3 KiB
Bash
Executable File
#!/bin/bash
|
||
# Test script to verify GNOME integration for pyPhotoAlbum
|
||
|
||
set -e
|
||
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
print_header() {
|
||
echo -e "\n${BLUE}========================================${NC}"
|
||
echo -e "${BLUE}$1${NC}"
|
||
echo -e "${BLUE}========================================${NC}\n"
|
||
}
|
||
|
||
print_success() {
|
||
echo -e "${GREEN}✓${NC} $1"
|
||
}
|
||
|
||
print_error() {
|
||
echo -e "${RED}✗${NC} $1"
|
||
}
|
||
|
||
print_warning() {
|
||
echo -e "${YELLOW}⚠${NC} $1"
|
||
}
|
||
|
||
print_info() {
|
||
echo -e "${BLUE}ℹ${NC} $1"
|
||
}
|
||
|
||
# Check counter
|
||
PASSED=0
|
||
FAILED=0
|
||
WARNINGS=0
|
||
|
||
print_header "GNOME Integration Test for pyPhotoAlbum"
|
||
|
||
# Test 1: Check if desktop file exists
|
||
print_header "1. Desktop File Installation"
|
||
|
||
if [ -f ~/.local/share/applications/pyphotoalbum.desktop ]; then
|
||
print_success "Desktop file found in user directory"
|
||
DESKTOP_FILE=~/.local/share/applications/pyphotoalbum.desktop
|
||
((PASSED++))
|
||
elif [ -f /usr/share/applications/pyphotoalbum.desktop ]; then
|
||
print_success "Desktop file found in system directory"
|
||
DESKTOP_FILE=/usr/share/applications/pyphotoalbum.desktop
|
||
((PASSED++))
|
||
else
|
||
print_error "Desktop file not found"
|
||
print_info "Expected locations:"
|
||
echo " - ~/.local/share/applications/pyphotoalbum.desktop"
|
||
echo " - /usr/share/applications/pyphotoalbum.desktop"
|
||
((FAILED++))
|
||
DESKTOP_FILE=""
|
||
fi
|
||
|
||
# Test 2: Validate desktop file
|
||
print_header "2. Desktop File Validation"
|
||
|
||
if [ -n "$DESKTOP_FILE" ]; then
|
||
if command -v desktop-file-validate &> /dev/null; then
|
||
if desktop-file-validate "$DESKTOP_FILE" 2>/dev/null; then
|
||
print_success "Desktop file is valid"
|
||
((PASSED++))
|
||
else
|
||
print_warning "Desktop file has validation warnings"
|
||
desktop-file-validate "$DESKTOP_FILE"
|
||
((WARNINGS++))
|
||
fi
|
||
else
|
||
print_warning "desktop-file-validate not installed (install desktop-file-utils)"
|
||
((WARNINGS++))
|
||
fi
|
||
|
||
# Check StartupWMClass
|
||
if grep -q "StartupWMClass=pyPhotoAlbum" "$DESKTOP_FILE"; then
|
||
print_success "StartupWMClass is set correctly"
|
||
((PASSED++))
|
||
else
|
||
print_error "StartupWMClass not set correctly"
|
||
((FAILED++))
|
||
fi
|
||
|
||
# Check StartupNotify
|
||
if grep -q "StartupNotify=true" "$DESKTOP_FILE"; then
|
||
print_success "StartupNotify is enabled"
|
||
((PASSED++))
|
||
else
|
||
print_warning "StartupNotify not enabled (better taskbar feedback)"
|
||
((WARNINGS++))
|
||
fi
|
||
fi
|
||
|
||
# Test 3: Check icon installation
|
||
print_header "3. Icon Installation"
|
||
|
||
ICON_FOUND=0
|
||
ICON_SIZES=(16 22 24 32 48 64 128 256 512)
|
||
|
||
for size in "${ICON_SIZES[@]}"; do
|
||
USER_ICON=~/.local/share/icons/hicolor/${size}x${size}/apps/pyphotoalbum.png
|
||
SYSTEM_ICON=/usr/share/icons/hicolor/${size}x${size}/apps/pyphotoalbum.png
|
||
|
||
if [ -f "$USER_ICON" ]; then
|
||
print_success "Found ${size}x${size} icon (user)"
|
||
((ICON_FOUND++))
|
||
elif [ -f "$SYSTEM_ICON" ]; then
|
||
print_success "Found ${size}x${size} icon (system)"
|
||
((ICON_FOUND++))
|
||
fi
|
||
done
|
||
|
||
if [ $ICON_FOUND -eq 0 ]; then
|
||
print_error "No icons found"
|
||
((FAILED++))
|
||
elif [ $ICON_FOUND -lt 5 ]; then
|
||
print_warning "Only $ICON_FOUND icon size(s) found (recommended: multiple sizes)"
|
||
print_info "Run './generate_icons.sh' to create more sizes"
|
||
((WARNINGS++))
|
||
((PASSED++))
|
||
else
|
||
print_success "Multiple icon sizes installed ($ICON_FOUND sizes)"
|
||
((PASSED++))
|
||
fi
|
||
|
||
# Test 4: Check if application is in PATH
|
||
print_header "4. Application Executable"
|
||
|
||
if command -v pyphotoalbum &> /dev/null; then
|
||
print_success "pyphotoalbum command found in PATH"
|
||
print_info "Location: $(which pyphotoalbum)"
|
||
((PASSED++))
|
||
else
|
||
print_error "pyphotoalbum command not found in PATH"
|
||
print_info "Make sure ~/.local/bin is in your PATH"
|
||
echo " Add to ~/.bashrc: export PATH=\"\$HOME/.local/bin:\$PATH\""
|
||
((FAILED++))
|
||
fi
|
||
|
||
# Test 5: Check icon cache
|
||
print_header "5. Icon Cache Status"
|
||
|
||
if command -v gtk-update-icon-cache &> /dev/null; then
|
||
print_success "gtk-update-icon-cache is available"
|
||
((PASSED++))
|
||
|
||
# Check cache timestamp
|
||
if [ -f ~/.local/share/icons/hicolor/icon-theme.cache ]; then
|
||
print_success "User icon cache exists"
|
||
CACHE_TIME=$(stat -c %Y ~/.local/share/icons/hicolor/icon-theme.cache 2>/dev/null || stat -f %m ~/.local/share/icons/hicolor/icon-theme.cache 2>/dev/null)
|
||
print_info "Last updated: $(date -d @$CACHE_TIME 2>/dev/null || date -r $CACHE_TIME 2>/dev/null)"
|
||
((PASSED++))
|
||
else
|
||
print_warning "User icon cache not found (may need update)"
|
||
print_info "Run: gtk-update-icon-cache ~/.local/share/icons/hicolor/"
|
||
((WARNINGS++))
|
||
fi
|
||
else
|
||
print_warning "gtk-update-icon-cache not found"
|
||
print_info "Install gtk3 or gtk4 package"
|
||
((WARNINGS++))
|
||
fi
|
||
|
||
# Test 6: Check desktop database
|
||
print_header "6. Desktop Database"
|
||
|
||
if command -v update-desktop-database &> /dev/null; then
|
||
print_success "update-desktop-database is available"
|
||
((PASSED++))
|
||
else
|
||
print_warning "update-desktop-database not found"
|
||
print_info "Install desktop-file-utils package"
|
||
((WARNINGS++))
|
||
fi
|
||
|
||
# Test 7: Check GNOME Shell
|
||
print_header "7. GNOME Environment"
|
||
|
||
if [ "$XDG_CURRENT_DESKTOP" = "GNOME" ]; then
|
||
print_success "Running in GNOME desktop environment"
|
||
((PASSED++))
|
||
else
|
||
print_info "Not running GNOME (detected: ${XDG_CURRENT_DESKTOP:-unknown})"
|
||
print_info "This test is designed for GNOME but should work on other DEs"
|
||
fi
|
||
|
||
if [ -n "$WAYLAND_DISPLAY" ]; then
|
||
print_info "Running Wayland session"
|
||
elif [ -n "$DISPLAY" ]; then
|
||
print_info "Running X11 session"
|
||
fi
|
||
|
||
# Test 8: Test application launch
|
||
print_header "8. Application Launch Test"
|
||
|
||
if command -v pyphotoalbum &> /dev/null; then
|
||
print_info "To test the application, run: pyphotoalbum"
|
||
print_info "Check if:"
|
||
echo " 1. Icon appears in taskbar"
|
||
echo " 2. Window title matches application name"
|
||
echo " 3. Alt+Tab shows correct icon and name"
|
||
echo " 4. Application appears in GNOME Activities search"
|
||
else
|
||
print_error "Cannot test - application not installed"
|
||
((FAILED++))
|
||
fi
|
||
|
||
# Summary
|
||
print_header "Test Summary"
|
||
|
||
TOTAL=$((PASSED + FAILED))
|
||
echo -e "${GREEN}Passed:${NC} $PASSED"
|
||
echo -e "${RED}Failed:${NC} $FAILED"
|
||
echo -e "${YELLOW}Warnings:${NC} $WARNINGS"
|
||
echo ""
|
||
|
||
if [ $FAILED -eq 0 ]; then
|
||
if [ $WARNINGS -eq 0 ]; then
|
||
echo -e "${GREEN}✓ All tests passed! GNOME integration is properly configured.${NC}"
|
||
else
|
||
echo -e "${YELLOW}⚠ Tests passed with warnings. Integration should work but can be improved.${NC}"
|
||
fi
|
||
else
|
||
echo -e "${RED}✗ Some tests failed. Please fix the issues above.${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# Additional recommendations
|
||
print_header "Recommendations"
|
||
|
||
echo "For best GNOME integration:"
|
||
echo " 1. Generate multiple icon sizes:"
|
||
echo " ./generate_icons.sh"
|
||
echo ""
|
||
echo " 2. After installation, log out and log back in"
|
||
echo " or restart GNOME Shell (Alt+F2, type 'r', Enter)"
|
||
echo ""
|
||
echo " 3. If icon doesn't appear, clear icon cache:"
|
||
echo " rm ~/.cache/icon-cache.kcache"
|
||
echo " gtk-update-icon-cache -f ~/.local/share/icons/hicolor/"
|
||
echo ""
|
||
echo " 4. Search for 'pyPhotoAlbum' in GNOME Activities"
|
||
echo ""
|
||
echo " 5. Pin to favorites by right-clicking the icon in Activities"
|
||
echo ""
|