/**
* `formatRawLabel()` の期待値表(指示書O 段階2)。
*
* ★期待値表を先に確定させ、実装より先にこのテストを書いている(CLAUDE.md §9.4)★
*
* | # | 入力 | 期待値 | 意図 |
* |---|-----------------------------|----------------------------------|----------------------------------------|
* | 1 | "EmergencyStop" | "EmergencyStop"(そのまま) | 値が入っていれば生値のまま(D-077) |
* | 2 | "" | EMPTY_VALUE_LABEL | 空文字は代替文言 |
* | 3 | " " | EMPTY_VALUE_LABEL | 空白のみも代替文言 |
* | 4 | null | EMPTY_VALUE_LABEL | nullも代替文言 |
* | 5 | undefined | EMPTY_VALUE_LABEL | undefinedも代替文言 |
* | 6 | " EmergencyStop " | "EmergencyStop"(トリムして返す)| 前後空白はトリムする決定を固定する |
*
* ★ケース6の決定: トリムして返す★(`lib/format/robot-model.ts` が比較前にトリムしている
* 前例を踏襲。指示書O 禁止事項2「トリム以外の変換をしない」=トリムは許容される変換)。
*/
import { describe, expect, it } from "vitest";
import { EMPTY_VALUE_LABEL, formatRawLabel } from "@/lib/format/raw-label";
describe("formatRawLabel", () => {
it("1. 値が入っていれば生値のまま返す(加工しない。D-077)", () => {
expect(formatRawLabel("EmergencyStop")).toBe("EmergencyStop");
});
it("2. 空文字は代替文言になる", () => {
expect(formatRawLabel("")).toBe(EMPTY_VALUE_LABEL);
});
it("3. 空白のみの文字列は代替文言になる", () => {
expect(formatRawLabel(" ")).toBe(EMPTY_VALUE_LABEL);
});
it("4. null は代替文言になる", () => {
expect(formatRawLabel(null)).toBe(EMPTY_VALUE_LABEL);
});
it("5. undefined は代替文言になる", () => {
expect(formatRawLabel(undefined)).toBe(EMPTY_VALUE_LABEL);
});
it("6. 前後に空白がある値はトリムして返す(決定を固定する)", () => {
expect(formatRawLabel(" EmergencyStop ")).toBe("EmergencyStop");
});
it("代替文言そのものが空でないこと(実装が壊れて空文字を返す事故を検知する)", () => {
expect(EMPTY_VALUE_LABEL.length).toBeGreaterThan(0);
});
});