from vivid_solution_prompt_analysis_and_replacement import ( PromptReplaceParserNode, parse_override_text, parse_source, ) def test_parse_source_from_json_string(): source = '{"转换描述": {"目标": "构建现代建筑", "环境": "城市广场"}, "类型选择": "精细模型"}' desc, style = parse_source(source) assert desc["目标"] == "构建现代建筑" assert desc["环境"] == "城市广场" assert style == "精细模型" def test_parse_source_from_python_dict_string(): source = "{'转换描述': {'目标': '建筑重构', '光影': '清晨侧光'}, '类型选择': '体块模型'}" desc, style = parse_source(source) assert desc["目标"] == "建筑重构" assert desc["光影"] == "清晨侧光" assert style == "体块模型" def test_parse_override_text_partial_labels(): override_text = "环境:滨水平台。\n光影:黄昏侧光。\n" result = parse_override_text(override_text) assert result["环境"] == "滨水平台。" assert result["光影"] == "黄昏侧光。" def test_run_prefers_valid_chinese_override_and_falls_back_to_source(): node = PromptReplaceParserNode() source = "目标:构建现代建筑\n环境:城市广场\n光影:清晨侧光\n类型选择:精细模型" override = "环境:滨水平台\n" prompt_list, prompt_text, style_text = node.run(source, override) assert prompt_list == [ "目标:构建现代建筑。", "环境:滨水平台。", "光影:清晨侧光。", ] assert prompt_text == "目标:构建现代建筑。\n环境:滨水平台。\n光影:清晨侧光。" assert style_text == "精细模型" def test_run_ignores_non_chinese_override_for_field_and_style(): node = PromptReplaceParserNode() source = "目标:建筑方案\n环境:城市广场\n类型选择:精细模型" override = "环境: plaza\n类型选择: photo\n" prompt_list, prompt_text, style_text = node.run(source, override) assert prompt_list == [ "目标:建筑方案。", "环境:城市广场。", ] assert prompt_text == "目标:建筑方案。\n环境:城市广场。" assert style_text == "精细模型"