FormCollectDimensionTest.java 2.32 KB
package com.xly.tool;

import org.junit.jupiter.api.Test;

import java.util.LinkedHashMap;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;

/**
 * 尺寸拆分正则(自 SlotFillService 迁入):模型拆不对「长和宽50cm,高5cm」是实测结论,
 * 预填值里的尺寸表达必须由代码确定性拆成 长/宽/高。
 */
class FormCollectDimensionTest {

    private static Map<String, String> known(String... kv) {
        Map<String, String> m = new LinkedHashMap<>();
        for (int i = 0; i < kv.length; i += 2) {
            m.put(kv[i], kv[i + 1]);
        }
        return m;
    }

    @Test
    void positionalSpecSplitsIntoLwh() {
        Map<String, String> m = known("规格", "60*40*30");
        FormCollectTool.expandDimensions(m);
        assertEquals("60", m.get("长"));
        assertEquals("40", m.get("宽"));
        assertEquals("30", m.get("高"));
        assertEquals("60*40*30", m.get("规格"), "原值保留");
    }

    @Test
    void labeledSpecWithSharedValueAndUnits() {
        Map<String, String> m = known("尺寸", "长和宽50cm,高5cm");
        FormCollectTool.expandDimensions(m);
        assertEquals("50", m.get("长"));
        assertEquals("50", m.get("宽"));
        assertEquals("5", m.get("高"));
    }

    @Test
    void multiplicationSignsAndDecimals() {
        Map<String, String> m = known("规格", "50×30x5.5");
        FormCollectTool.expandDimensions(m);
        assertEquals("50", m.get("长"));
        assertEquals("30", m.get("宽"));
        assertEquals("5.5", m.get("高"));
    }

    @Test
    void existingExplicitDimsAreNotOverwritten() {
        Map<String, String> m = known("长", "99", "规格", "60*40*30");
        FormCollectTool.expandDimensions(m);
        assertEquals("99", m.get("长"), "模型已明确给的 长 不被覆盖");
        assertEquals("40", m.get("宽"));
    }

    @Test
    void plainValuesAreUntouched() {
        Map<String, String> m = known("数量", "5000", "产品名称", "大16开画册", "联系电话", "0571-88881234");
        FormCollectTool.expandDimensions(m);
        assertFalse(m.containsKey("长"), "普通数值/名称/电话不产生尺寸");
        assertEquals("大16开画册", m.get("产品名称"), "值逐字保留");
    }
}