From 257457a2d86ed3c9ace27dc8e848e35ae8b19876 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Mon, 19 Sep 2022 20:54:05 -0800 Subject: [PATCH] implement string utilities lib --- frontend/lib/strings/index.test.ts | 56 ++++++++++++++++++++++++++++++ frontend/lib/strings/index.ts | 14 ++++++++ 2 files changed, 70 insertions(+) create mode 100644 frontend/lib/strings/index.test.ts create mode 100644 frontend/lib/strings/index.ts diff --git a/frontend/lib/strings/index.test.ts b/frontend/lib/strings/index.test.ts new file mode 100644 index 0000000..1f266ea --- /dev/null +++ b/frontend/lib/strings/index.test.ts @@ -0,0 +1,56 @@ +import { describe, it, expect } from "vitest"; +import { titlecase, capitalize, truncate } from "."; + +describe("title case tests", () => { + it("should return the same string if it's already title case", () => { + expect(titlecase("Hello World")).toBe("Hello World"); + }); + + it("should title case a lower case word", () => { + expect(titlecase("hello")).toBe("Hello"); + }); + + it("should title case a sentence", () => { + expect(titlecase("hello world")).toBe("Hello World"); + }); + + it("should title case a sentence with multiple words", () => { + expect(titlecase("hello world this is a test")).toBe("Hello World This Is A Test"); + }); +}); + +describe("capitilize tests", () => { + it("should return the same string if it's already capitalized", () => { + expect(capitalize("Hello")).toBe("Hello"); + }); + + it("should capitalize a lower case word", () => { + expect(capitalize("hello")).toBe("Hello"); + }); + + it("should capitalize a sentence", () => { + expect(capitalize("hello world")).toBe("Hello world"); + }); + + it("should capitalize a sentence with multiple words", () => { + expect(capitalize("hello world this is a test")).toBe("Hello world this is a test"); + }); +}); + +describe("truncase tests", () => { + it("should return the same string if it's already truncated", () => { + expect(truncate("Hello", 5)).toBe("Hello"); + }); + + it("should truncate a lower case word", () => { + expect(truncate("hello", 3)).toBe("hel..."); + }); + + it("should truncate a sentence", () => { + expect(truncate("hello world", 5)).toBe("hello..."); + }); + + it("should truncate a sentence with multiple words", () => { + expect(truncate("hello world this is a test", 10)).toBe("hello worl..."); + }); +}); diff --git a/frontend/lib/strings/index.ts b/frontend/lib/strings/index.ts new file mode 100644 index 0000000..9f23e90 --- /dev/null +++ b/frontend/lib/strings/index.ts @@ -0,0 +1,14 @@ +export function titlecase(str: string) { + return str + .split(" ") + .map(word => word[0].toUpperCase() + word.slice(1)) + .join(" "); +} + +export function capitalize(str: string) { + return str[0].toUpperCase() + str.slice(1); +} + +export function truncate(str: string, length: number) { + return str.length > length ? str.substring(0, length) + "..." : str; +}