#!/usr/bin/env python # -*- coding: utf-8 -*- """ 测试ResourceLoader组件 该脚本演示如何独立使用resource_loader模块加载资源文件。 """ import os import sys import tempfile import json from pathlib import Path # 将项目根目录添加到PATH project_root = str(Path(__file__).parent.parent.absolute()) if project_root not in sys.path: sys.path.append(project_root) from utils.resource_loader import ResourceLoader def create_test_files(): """创建测试用的资源文件结构""" # 创建临时目录 temp_dir = tempfile.mkdtemp() # 创建资源目录结构 resources_dir = os.path.join(temp_dir, "resources") os.makedirs(resources_dir, exist_ok=True) # 创建各类资源子目录 image_dir = os.path.join(resources_dir, "images") font_dir = os.path.join(resources_dir, "fonts") sticker_dir = os.path.join(resources_dir, "stickers") background_dir = os.path.join(resources_dir, "backgrounds") os.makedirs(image_dir, exist_ok=True) os.makedirs(font_dir, exist_ok=True) os.makedirs(sticker_dir, exist_ok=True) os.makedirs(os.path.join(background_dir, "portrait"), exist_ok=True) os.makedirs(os.path.join(background_dir, "landscape"), exist_ok=True) # 创建测试图片文件(创建文本文件代替) img1_path = os.path.join(image_dir, "test1.jpg") img2_path = os.path.join(image_dir, "test2.png") with open(img1_path, 'w') as f: f.write("Dummy JPG image file") with open(img2_path, 'w') as f: f.write("Dummy PNG image file") # 创建字体文件 font1_path = os.path.join(font_dir, "test_font1.ttf") font2_path = os.path.join(font_dir, "test_font2.ttf") with open(font1_path, 'w') as f: f.write("Dummy TTF font file 1") with open(font2_path, 'w') as f: f.write("Dummy TTF font file 2") # 创建贴纸文件 sticker1_path = os.path.join(sticker_dir, "sticker1.png") sticker2_path = os.path.join(sticker_dir, "sticker2.png") with open(sticker1_path, 'w') as f: f.write("Dummy sticker file 1") with open(sticker2_path, 'w') as f: f.write("Dummy sticker file 2") # 创建背景文件 bg_portrait_path = os.path.join(background_dir, "portrait", "bg1.jpg") bg_landscape_path = os.path.join(background_dir, "landscape", "bg1.jpg") with open(bg_portrait_path, 'w') as f: f.write("Dummy portrait background") with open(bg_landscape_path, 'w') as f: f.write("Dummy landscape background") # 创建配置文件 config_path = os.path.join(temp_dir, "config.json") config = { "resource_dir": resources_dir, "font_dir": font_dir, "sticker_dir": sticker_dir, "bg_portrait_dir": os.path.join(background_dir, "portrait"), "bg_landscape_dir": os.path.join(background_dir, "landscape"), "output_dir": os.path.join(temp_dir, "output") } with open(config_path, 'w') as f: json.dump(config, f, indent=2) # 返回创建的文件路径 return { "temp_dir": temp_dir, "resources_dir": resources_dir, "config_path": config_path, "image_dir": image_dir, "font_dir": font_dir, "sticker_dir": sticker_dir, "bg_portrait_dir": os.path.join(background_dir, "portrait"), "bg_landscape_dir": os.path.join(background_dir, "landscape"), } def main(): """主函数""" print("=== 测试 ResourceLoader 组件 ===") # 创建测试文件 test_files = create_test_files() print(f"创建临时测试文件夹: {test_files['temp_dir']}") try: # 加载配置 with open(test_files["config_path"], 'r') as f: config = json.load(f) # 初始化ResourceLoader resource_loader = ResourceLoader(config) # 测试1: 加载字体 print("\n测试1: 加载字体文件") fonts = resource_loader.load_fonts() print(f"加载字体数量: {len(fonts)}") if len(fonts) == 2: print("测试通过: 成功加载了2个字体文件") else: print(f"测试失败: 应加载2个字体文件,实际加载了{len(fonts)}个") # 测试2: 加载贴纸 print("\n测试2: 加载贴纸文件") stickers = resource_loader.load_stickers() print(f"加载贴纸数量: {len(stickers)}") if len(stickers) == 2: print("测试通过: 成功加载了2个贴纸文件") else: print(f"测试失败: 应加载2个贴纸文件,实际加载了{len(stickers)}个") # 测试3: 加载背景图 print("\n测试3: 加载背景图文件") portrait_bgs = resource_loader.load_backgrounds("portrait") landscape_bgs = resource_loader.load_backgrounds("landscape") print(f"加载竖版背景数量: {len(portrait_bgs)}") print(f"加载横版背景数量: {len(landscape_bgs)}") if len(portrait_bgs) == 1: print("测试通过: 成功加载了1个竖版背景文件") else: print(f"测试失败: 应加载1个竖版背景文件,实际加载了{len(portrait_bgs)}个") if len(landscape_bgs) == 1: print("测试通过: 成功加载了1个横版背景文件") else: print(f"测试失败: 应加载1个横版背景文件,实际加载了{len(landscape_bgs)}个") # 测试4: 创建输出目录 print("\n测试4: 创建输出目录") output_dir = resource_loader.get_output_dir() if os.path.exists(output_dir): print(f"测试通过: 成功创建输出目录 {output_dir}") else: print(f"测试失败: 未能成功创建输出目录 {output_dir}") # 测试5: 异常处理 - 非法方向 print("\n测试5: 异常处理 - 加载非法方向背景") try: invalid_bgs = resource_loader.load_backgrounds("invalid_direction") print("测试失败: 应该抛出异常但未抛出") except ValueError as e: print(f"测试通过: 成功捕获到期望的ValueError异常: {e}") except Exception as e: print(f"测试失败: 捕获到意外的异常类型: {type(e).__name__}") except Exception as e: print(f"测试过程中出错: {e}") import traceback traceback.print_exc() finally: # 清理临时文件 import shutil try: shutil.rmtree(test_files["temp_dir"]) print(f"\n清理临时文件: {test_files['temp_dir']}") except Exception as e: print(f"清理临时文件失败: {e}") print("\n=== 测试完成 ===") if __name__ == "__main__": main()