mirror of
https://github.com/harry0703/MoneyPrinterTurbo.git
synced 2026-02-21 08:27:22 +08:00
85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
|
|
import unittest
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
from moviepy import (
|
|
VideoFileClip,
|
|
)
|
|
# add project root to python path
|
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
|
|
from app.models.schema import MaterialInfo
|
|
from app.services import video as vd
|
|
from app.utils import utils
|
|
|
|
resources_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), "resources")
|
|
|
|
class TestVideoService(unittest.TestCase):
|
|
def setUp(self):
|
|
self.test_img_path = os.path.join(resources_dir, "1.png")
|
|
|
|
def tearDown(self):
|
|
pass
|
|
|
|
def test_preprocess_video(self):
|
|
if not os.path.exists(self.test_img_path):
|
|
self.fail(f"test image not found: {self.test_img_path}")
|
|
|
|
# test preprocess_video function
|
|
m = MaterialInfo()
|
|
m.url = self.test_img_path
|
|
m.provider = "local"
|
|
print(m)
|
|
|
|
materials = vd.preprocess_video([m], clip_duration=4)
|
|
print(materials)
|
|
|
|
# verify result
|
|
self.assertIsNotNone(materials)
|
|
self.assertEqual(len(materials), 1)
|
|
self.assertTrue(materials[0].url.endswith(".mp4"))
|
|
|
|
# moviepy get video info
|
|
clip = VideoFileClip(materials[0].url)
|
|
print(clip)
|
|
|
|
# clean generated test video file
|
|
if os.path.exists(materials[0].url):
|
|
os.remove(materials[0].url)
|
|
|
|
def test_wrap_text(self):
|
|
"""test text wrapping function"""
|
|
try:
|
|
font_path = os.path.join(utils.font_dir(), "STHeitiMedium.ttc")
|
|
if not os.path.exists(font_path):
|
|
self.fail(f"font file not found: {font_path}")
|
|
|
|
# test english text wrapping
|
|
test_text_en = "This is a test text for wrapping long sentences in english language"
|
|
|
|
wrapped_text_en, text_height_en = vd.wrap_text(
|
|
text=test_text_en,
|
|
max_width=300,
|
|
font=font_path,
|
|
fontsize=30
|
|
)
|
|
print(wrapped_text_en, text_height_en)
|
|
# verify text is wrapped
|
|
self.assertIn("\n", wrapped_text_en)
|
|
|
|
# test chinese text wrapping
|
|
test_text_zh = "这是一段用来测试中文长句换行的文本内容,应该会根据宽度限制进行换行处理"
|
|
wrapped_text_zh, text_height_zh = vd.wrap_text(
|
|
text=test_text_zh,
|
|
max_width=300,
|
|
font=font_path,
|
|
fontsize=30
|
|
)
|
|
print(wrapped_text_zh, text_height_zh)
|
|
# verify chinese text is wrapped
|
|
self.assertIn("\n", wrapped_text_zh)
|
|
except Exception as e:
|
|
self.fail(f"test wrap_text failed: {str(e)}")
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main() |