197 lines
6.8 KiB
Python
197 lines
6.8 KiB
Python
#!/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() |