From f273cef1953a20d9c1994d52ad41c8386187c7a8 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Mon, 2 Mar 2026 23:50:31 +0800 Subject: [PATCH] fix: use quoted strings for size values in YAML to prevent time parsing YAML parser interprets 16:9 as time format (16h 9m = 969s). Using quoted strings "16:9" ensures correct string parsing. --- README.md | 4 ++-- tests/conftest.py | 6 +++--- tests/e2e/test_check_cmd.py | 14 ++++++------- tests/e2e/test_convert_cmd.py | 4 ++-- tests/e2e/test_preview_cmd.py | 4 ++-- .../all_element_types_one_slide.yaml | 2 +- .../edge_cases/empty_content.yaml | 2 +- .../edge_cases/empty_font_attributes.yaml | 2 +- .../edge_cases/mixed_color_formats.yaml | 2 +- .../edge_cases/negative_position.yaml | 2 +- .../edge_cases/special_chars.yaml | 2 +- .../yaml_samples/edge_cases/unicode.yaml | 2 +- .../edge_cases/very_large_font.yaml | 2 +- .../edge_cases/zero_size_box.yaml | 2 +- .../fixtures/yaml_samples/full_features.yaml | 2 +- .../yaml_samples/invalid/invalid_color.yaml | 2 +- .../yaml_samples/invalid/missing_slides.yaml | 2 +- .../yaml_samples/invalid/syntax_error.yaml | 2 +- tests/fixtures/yaml_samples/minimal.yaml | 2 +- tests/integration/test_presentation.py | 12 +++++------ tests/integration/test_rendering_flow.py | 14 ++++++------- tests/integration/test_validation_flow.py | 20 +++++++++---------- tests/unit/test_presentation.py | 4 ++-- 23 files changed, 55 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index 98a0f73..9b20ed6 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ uv run yaml2pptx.py convert presentation.yaml --skip-validation ```yaml metadata: - size: 16:9 # 或 4:3 + size: "16:9" # 或 "4:3" slides: - background: @@ -121,7 +121,7 @@ slides: ```yaml metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide diff --git a/tests/conftest.py b/tests/conftest.py index 6105940..6877d7c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -29,7 +29,7 @@ def project_root_dir(): # ============= YAML 文件 Fixtures ============= MINIMAL_YAML = """metadata: - size: 16:9 + size: "16:9" slides: - background: @@ -207,7 +207,7 @@ def yaml_with_all_elements(temp_dir): """创建包含所有元素类型的 YAML""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - background: @@ -292,7 +292,7 @@ def multiple_slides_yaml(temp_dir): """创建多张幻灯片的 YAML""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: # 第一张:标题页 diff --git a/tests/e2e/test_check_cmd.py b/tests/e2e/test_check_cmd.py index 3cd5367..33ad8e0 100644 --- a/tests/e2e/test_check_cmd.py +++ b/tests/e2e/test_check_cmd.py @@ -37,7 +37,7 @@ class TestCheckCmd: # 创建包含错误的 YAML yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -59,7 +59,7 @@ slides: """测试只有警告的 YAML(验证通过但有警告)""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -81,7 +81,7 @@ slides: """测试检查使用模板的 YAML""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -99,7 +99,7 @@ slides: """测试检查使用不存在模板的 YAML""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - template: nonexistent @@ -118,7 +118,7 @@ slides: """测试检查报告多个错误""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -147,7 +147,7 @@ slides: """测试检查包含位置信息""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -170,7 +170,7 @@ slides: """测试检查缺少必需变量的模板""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide diff --git a/tests/e2e/test_convert_cmd.py b/tests/e2e/test_convert_cmd.py index 1eba12c..608ebea 100644 --- a/tests/e2e/test_convert_cmd.py +++ b/tests/e2e/test_convert_cmd.py @@ -55,7 +55,7 @@ class TestConvertCmd: """测试使用模板转换""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -147,7 +147,7 @@ slides: """测试转换保留中文内容""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/e2e/test_preview_cmd.py b/tests/e2e/test_preview_cmd.py index edffb90..f86b755 100644 --- a/tests/e2e/test_preview_cmd.py +++ b/tests/e2e/test_preview_cmd.py @@ -41,7 +41,7 @@ class TestGeneratePreviewHtml: """测试使用模板生成 HTML""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -71,7 +71,7 @@ slides: """测试多张幻灯片的 HTML""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/all_element_types_one_slide.yaml b/tests/fixtures/yaml_samples/edge_cases/all_element_types_one_slide.yaml index e87bbe1..64bcadc 100644 --- a/tests/fixtures/yaml_samples/edge_cases/all_element_types_one_slide.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/all_element_types_one_slide.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/empty_content.yaml b/tests/fixtures/yaml_samples/edge_cases/empty_content.yaml index 7964244..2fb6111 100644 --- a/tests/fixtures/yaml_samples/edge_cases/empty_content.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/empty_content.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/empty_font_attributes.yaml b/tests/fixtures/yaml_samples/edge_cases/empty_font_attributes.yaml index 53a97e5..f18be74 100644 --- a/tests/fixtures/yaml_samples/edge_cases/empty_font_attributes.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/empty_font_attributes.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/mixed_color_formats.yaml b/tests/fixtures/yaml_samples/edge_cases/mixed_color_formats.yaml index 6d04e3c..0eb5166 100644 --- a/tests/fixtures/yaml_samples/edge_cases/mixed_color_formats.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/mixed_color_formats.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/negative_position.yaml b/tests/fixtures/yaml_samples/edge_cases/negative_position.yaml index e0f1b73..edb8bfb 100644 --- a/tests/fixtures/yaml_samples/edge_cases/negative_position.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/negative_position.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/special_chars.yaml b/tests/fixtures/yaml_samples/edge_cases/special_chars.yaml index d12b399..9654316 100644 --- a/tests/fixtures/yaml_samples/edge_cases/special_chars.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/special_chars.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/unicode.yaml b/tests/fixtures/yaml_samples/edge_cases/unicode.yaml index 2195a42..66e9bf6 100644 --- a/tests/fixtures/yaml_samples/edge_cases/unicode.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/unicode.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/very_large_font.yaml b/tests/fixtures/yaml_samples/edge_cases/very_large_font.yaml index 480ee0e..9e23755 100644 --- a/tests/fixtures/yaml_samples/edge_cases/very_large_font.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/very_large_font.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/edge_cases/zero_size_box.yaml b/tests/fixtures/yaml_samples/edge_cases/zero_size_box.yaml index 0eddf60..03fa58b 100644 --- a/tests/fixtures/yaml_samples/edge_cases/zero_size_box.yaml +++ b/tests/fixtures/yaml_samples/edge_cases/zero_size_box.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/full_features.yaml b/tests/fixtures/yaml_samples/full_features.yaml index c8995f5..7595b9d 100644 --- a/tests/fixtures/yaml_samples/full_features.yaml +++ b/tests/fixtures/yaml_samples/full_features.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: # 文本元素幻灯片 diff --git a/tests/fixtures/yaml_samples/invalid/invalid_color.yaml b/tests/fixtures/yaml_samples/invalid/invalid_color.yaml index f508eb5..371b5a3 100644 --- a/tests/fixtures/yaml_samples/invalid/invalid_color.yaml +++ b/tests/fixtures/yaml_samples/invalid/invalid_color.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/invalid/missing_slides.yaml b/tests/fixtures/yaml_samples/invalid/missing_slides.yaml index 3544260..cb1a070 100644 --- a/tests/fixtures/yaml_samples/invalid/missing_slides.yaml +++ b/tests/fixtures/yaml_samples/invalid/missing_slides.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" # Missing 'slides' key elements: diff --git a/tests/fixtures/yaml_samples/invalid/syntax_error.yaml b/tests/fixtures/yaml_samples/invalid/syntax_error.yaml index 33f9f31..a2525c4 100644 --- a/tests/fixtures/yaml_samples/invalid/syntax_error.yaml +++ b/tests/fixtures/yaml_samples/invalid/syntax_error.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/fixtures/yaml_samples/minimal.yaml b/tests/fixtures/yaml_samples/minimal.yaml index 3df765b..299c264 100644 --- a/tests/fixtures/yaml_samples/minimal.yaml +++ b/tests/fixtures/yaml_samples/minimal.yaml @@ -1,5 +1,5 @@ metadata: - size: 16:9 + size: "16:9" slides: - background: diff --git a/tests/integration/test_presentation.py b/tests/integration/test_presentation.py index 7772794..fb5d668 100644 --- a/tests/integration/test_presentation.py +++ b/tests/integration/test_presentation.py @@ -32,7 +32,7 @@ class TestTemplateCaching: # 创建使用模板的 YAML yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -69,7 +69,7 @@ class TestRenderSlide: """测试渲染使用模板的幻灯片""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -94,7 +94,7 @@ slides: # 有 subtitle 的情况 yaml_with = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -115,7 +115,7 @@ slides: # 没有 subtitle 的情况 yaml_without = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -136,7 +136,7 @@ slides: """测试变量传递""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -164,7 +164,7 @@ class TestPresentationWithoutTemplate: """测试直接渲染元素(不使用模板)""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/integration/test_rendering_flow.py b/tests/integration/test_rendering_flow.py index ea508b7..8662d60 100644 --- a/tests/integration/test_rendering_flow.py +++ b/tests/integration/test_rendering_flow.py @@ -39,7 +39,7 @@ class TestRenderingFlow: """测试文本元素渲染""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -81,7 +81,7 @@ slides: """测试图片元素渲染""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -111,7 +111,7 @@ slides: """测试形状元素渲染""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -145,7 +145,7 @@ slides: """测试表格元素渲染""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -180,7 +180,7 @@ slides: """测试背景渲染""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - background: @@ -217,7 +217,7 @@ slides: """测试使用模板的幻灯片渲染""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -254,7 +254,7 @@ slides: """测试多张幻灯片渲染""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/integration/test_validation_flow.py b/tests/integration/test_validation_flow.py index ddacbaf..13d37c5 100644 --- a/tests/integration/test_validation_flow.py +++ b/tests/integration/test_validation_flow.py @@ -26,7 +26,7 @@ class TestValidationFlow: """测试验证包含警告的 YAML""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -49,7 +49,7 @@ slides: """测试验证包含错误的 YAML""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -81,7 +81,7 @@ slides: """测试收集多个错误""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -110,7 +110,7 @@ slides: """测试错误包含位置信息""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -134,7 +134,7 @@ slides: """测试验证使用模板的 YAML""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -155,7 +155,7 @@ slides: """测试验证缺少必需变量的模板""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - template: title-slide @@ -175,7 +175,7 @@ slides: # 创建包含错误和警告的 YAML yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -200,7 +200,7 @@ slides: """测试验证结果格式化""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -229,7 +229,7 @@ slides: """测试验证图片资源""" yaml_content = f""" metadata: - size: 16:9 + size: "16:9" slides: - elements: @@ -250,7 +250,7 @@ slides: """测试验证不存在的图片资源""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: diff --git a/tests/unit/test_presentation.py b/tests/unit/test_presentation.py index 2a49468..651f714 100644 --- a/tests/unit/test_presentation.py +++ b/tests/unit/test_presentation.py @@ -65,7 +65,7 @@ class TestPresentationSize: """测试 16:9 尺寸""" yaml_content = """ metadata: - size: 16:9 + size: "16:9" slides: - elements: [] """ @@ -80,7 +80,7 @@ slides: """测试 4:3 尺寸""" yaml_content = """ metadata: - size: 4:3 + size: "4:3" slides: - elements: [] """