import TextFormat from "./TextFormat";

describe("TextFormat", () => {
  it.each([
    ["Peeter", "Tamm", "Peeter Tamm"],
    [null, "Tamm", "Tamm"],
    [undefined, "Tamm", "Tamm"],
    ["", "Tamm", "Tamm"],
    ["Peeter", undefined, "Peeter"],
    ["Peeter", null, "Peeter"],
    ["Peeter", "", "Peeter"],
  ])(
    "toFullName firstName='%s' lastName='%s' -> '%s'",
    (firstName, lastName, result) => {
      expect(TextFormat.toFullName({ firstName, lastName })).toEqual(result);
    },
  );

  describe("toTitleCase", () => {
    test("converts first letter to uppercase", () => {
      expect(TextFormat.toTitleCase("hello")).toBe("Hello");
    });

    test("converts each word to title case", () => {
      expect(TextFormat.toTitleCase("hello world")).toBe("Hello World");
    });

    test("handles empty string", () => {
      expect(TextFormat.toTitleCase("")).toBe("");
    });

    test("handles undefined", () => {
      expect(TextFormat.toTitleCase(undefined)).toBe("");
    });

    test("handles already capitalized text", () => {
      expect(TextFormat.toTitleCase("Hello World")).toBe("Hello World");
    });

    test("handles mixed case text", () => {
      expect(TextFormat.toTitleCase("hELLo WoRLd")).toBe("Hello World");
    });

    test("handles text with apostrophes", () => {
      expect(TextFormat.toTitleCase("don't stop")).toBe("Don't Stop");
    });

    test("handles text with hyphens", () => {
      expect(TextFormat.toTitleCase("well-known fact")).toBe("Well-Known Fact");
    });

    test("handles single character", () => {
      expect(TextFormat.toTitleCase("a")).toBe("A");
    });

    test("handles numbers and special characters", () => {
      expect(TextFormat.toTitleCase("test123 @#$")).toBe("Test123 @#$");
    });
  });
});
