From 2b5f14cf6979706d394a7699aa00f2b5e9d02bbb Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Mon, 31 Jan 2022 16:37:54 -0500 Subject: [PATCH 01/30] Require Hello World in the document --- src/text.Test.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/text.Test.tsx diff --git a/src/text.Test.tsx b/src/text.Test.tsx new file mode 100644 index 0000000000..b32c330d3f --- /dev/null +++ b/src/text.Test.tsx @@ -0,0 +1,9 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import App from "./App"; + +test("renders the text 'Hello World' somewhere", () => { + render(); + const text = screen.getByText(/Hello World/); + expect(text).toBeInTheDocument(); +}); From a7dee05e0bee0379110c6189433d12482280146a Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Mon, 31 Jan 2022 16:41:17 -0500 Subject: [PATCH 02/30] Rename text.Test.tsx to text.test.tsx --- src/{text.Test.tsx => text.test.tsx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{text.Test.tsx => text.test.tsx} (100%) diff --git a/src/text.Test.tsx b/src/text.test.tsx similarity index 100% rename from src/text.Test.tsx rename to src/text.test.tsx From 3e381f38b1d44afd102eb053a8ba9a48a069434e Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Mon, 31 Jan 2022 16:56:42 -0500 Subject: [PATCH 03/30] Include the task info --- public/tasks/task-first-branch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 public/tasks/task-first-branch.md diff --git a/public/tasks/task-first-branch.md b/public/tasks/task-first-branch.md new file mode 100644 index 0000000000..94333338a0 --- /dev/null +++ b/public/tasks/task-first-branch.md @@ -0,0 +1,5 @@ +# Task - First Branch + +Version: 0.0.1 + +Pass a short test to have certain text on the page. From e6b1dab1961daf6f03459789cef974bf043501f2 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Thu, 3 Feb 2022 14:10:55 -0500 Subject: [PATCH 04/30] Allow one or more instances of the Hello World text --- src/text.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/text.test.tsx b/src/text.test.tsx index b32c330d3f..f99a063e76 100644 --- a/src/text.test.tsx +++ b/src/text.test.tsx @@ -4,6 +4,6 @@ import App from "./App"; test("renders the text 'Hello World' somewhere", () => { render(); - const text = screen.getByText(/Hello World/); - expect(text).toBeInTheDocument(); + const texts = screen.getAllByText(/Hello World/); + expect(texts.length).toBeGreaterThanOrEqual(1); }); From 7a207345d9e404afd04607811b89bb758de02905 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 24 Aug 2024 12:52:12 -0400 Subject: [PATCH 05/30] Include json test command here --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index cf6e1bc772..fc2b66a549 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "build": "react-scripts build", "test": "react-scripts test", "test:cov": "react-scripts test --coverage --watchAll", + "test:json": "react-scripts test --json --watchAll=false --outputFile jest-output.json --coverage", "eject": "react-scripts eject", "lint": "eslint ./src --ext .tsx --ext .ts --max-warnings 0", "eslint-output": "eslint-output ./src --ext .tsx --ext .ts --max-warnings 0", From 7fe9ca316fad2e694586e037fe601b85a2584c56 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Mon, 31 Jan 2022 16:37:54 -0500 Subject: [PATCH 06/30] Require Hello World in the document --- src/text.Test.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/text.Test.tsx diff --git a/src/text.Test.tsx b/src/text.Test.tsx new file mode 100644 index 0000000000..b32c330d3f --- /dev/null +++ b/src/text.Test.tsx @@ -0,0 +1,9 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import App from "./App"; + +test("renders the text 'Hello World' somewhere", () => { + render(); + const text = screen.getByText(/Hello World/); + expect(text).toBeInTheDocument(); +}); From b8b8878c873d4faa2fd5f04d656e23d66c7d6cef Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Mon, 31 Jan 2022 16:56:42 -0500 Subject: [PATCH 07/30] Include the task info --- public/tasks/task-first-branch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 public/tasks/task-first-branch.md diff --git a/public/tasks/task-first-branch.md b/public/tasks/task-first-branch.md new file mode 100644 index 0000000000..94333338a0 --- /dev/null +++ b/public/tasks/task-first-branch.md @@ -0,0 +1,5 @@ +# Task - First Branch + +Version: 0.0.1 + +Pass a short test to have certain text on the page. From fbdebdec2006b01d3976bd9408037baf82eb5e56 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Mon, 31 Jan 2022 16:41:17 -0500 Subject: [PATCH 08/30] Rename text.Test.tsx to text.test.tsx --- src/{text.Test.tsx => text.test.tsx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{text.Test.tsx => text.test.tsx} (100%) diff --git a/src/text.Test.tsx b/src/text.test.tsx similarity index 100% rename from src/text.Test.tsx rename to src/text.test.tsx From 2f0146c22beca5c5ac48603876f0fa8ea2e2e905 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Thu, 3 Feb 2022 14:10:55 -0500 Subject: [PATCH 09/30] Allow one or more instances of the Hello World text --- src/text.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/text.test.tsx b/src/text.test.tsx index b32c330d3f..f99a063e76 100644 --- a/src/text.test.tsx +++ b/src/text.test.tsx @@ -4,6 +4,6 @@ import App from "./App"; test("renders the text 'Hello World' somewhere", () => { render(); - const text = screen.getByText(/Hello World/); - expect(text).toBeInTheDocument(); + const texts = screen.getAllByText(/Hello World/); + expect(texts.length).toBeGreaterThanOrEqual(1); }); From ac36b32302a8ea2e66b4b954626c8e396e172075 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 29 Jan 2022 23:59:24 -0500 Subject: [PATCH 10/30] First set of tests --- public/tasks/task-html-css.md | 5 +++++ src/HtmlCss.test.tsx | 28 ++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 public/tasks/task-html-css.md create mode 100644 src/HtmlCss.test.tsx diff --git a/public/tasks/task-html-css.md b/public/tasks/task-html-css.md new file mode 100644 index 0000000000..ebc0efcba5 --- /dev/null +++ b/public/tasks/task-html-css.md @@ -0,0 +1,5 @@ +# Task - HTML/CSS + +Version: 0.0.1 + +Add in some HTML and CSS, including a fancy looking button. diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx new file mode 100644 index 0000000000..168ce37fde --- /dev/null +++ b/src/HtmlCss.test.tsx @@ -0,0 +1,28 @@ +import React from "react"; +import { render, screen } from "@testing-library/react"; +import App from "./App"; + +describe("Some HTML Elements are added.", () => { + test("There is a header", () => { + render(); + const header = screen.getByRole("heading"); + expect(header).toBeInTheDocument(); + }); +}); + +describe("Some basic CSS is added.", () => { + test("There is a floating red box", () => { + render(); + expect(true); + }); +}); + +describe("Some Bootstrap Elements are added", () => { + test("There is a bootstrap button", () => { + render(); + const button = screen.getByRole("button"); + expect(button).toBeInTheDocument(); + expect(button).toHaveClass("btn"); + expect(button).toHaveClass("btn-primary"); + }); +}); From d04739d1d2ec0c934c0ecf1dc05ac1289063627d Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sun, 30 Jan 2022 00:24:38 -0500 Subject: [PATCH 11/30] Some logging tests --- src/HtmlCss.test.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx index 168ce37fde..bf957616f9 100644 --- a/src/HtmlCss.test.tsx +++ b/src/HtmlCss.test.tsx @@ -1,6 +1,7 @@ import React from "react"; import { render, screen } from "@testing-library/react"; import App from "./App"; +import userEvent from "@testing-library/user-event"; describe("Some HTML Elements are added.", () => { test("There is a header", () => { @@ -18,11 +19,25 @@ describe("Some basic CSS is added.", () => { }); describe("Some Bootstrap Elements are added", () => { - test("There is a bootstrap button", () => { + test("There is one bootstrap button with the text 'Log Hello World'", () => { render(); - const button = screen.getByRole("button"); + const button = screen.getByRole("button", { name: /Log Hello World/i }); expect(button).toBeInTheDocument(); expect(button).toHaveClass("btn"); expect(button).toHaveClass("btn-primary"); }); + + test("Not clicking the bootstrap button does not logs 'Hello World!'", () => { + const consoleSpy = jest.spyOn(console, "log"); + render(); + expect(consoleSpy).not.toHaveBeenCalledWith("Hello World!"); + }); + + test("Clicking the bootstrap button logs 'Hello World!'", () => { + const consoleSpy = jest.spyOn(console, "log"); + render(); + const button = screen.getByRole("button", { name: /Log Hello World/i }); + userEvent.click(button); + expect(consoleSpy).toHaveBeenCalledWith("Hello World!"); + }); }); From b26100f543943eced73fdff33784861243c65386 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sun, 30 Jan 2022 00:47:43 -0500 Subject: [PATCH 12/30] More html tests --- src/HtmlCss.test.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx index bf957616f9..676c37f903 100644 --- a/src/HtmlCss.test.tsx +++ b/src/HtmlCss.test.tsx @@ -9,6 +9,20 @@ describe("Some HTML Elements are added.", () => { const header = screen.getByRole("heading"); expect(header).toBeInTheDocument(); }); + + test("There is an image with alt text", () => { + render(); + const image = screen.getByRole("image"); + expect(image).toBeInTheDocument(); + expect(image).toHaveAttribute("alt"); + }); + + test("There is a list with at least three elements", () => { + render(); + const list = screen.getByRole("list"); + expect(list).toBeInTheDocument(); + expect(list.children.length).toBeGreaterThanOrEqual(3); + }); }); describe("Some basic CSS is added.", () => { From 3bf4550a8f042dee28a57c06abec05dfce779519 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sun, 30 Jan 2022 00:55:24 -0500 Subject: [PATCH 13/30] Fix the image test --- src/HtmlCss.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx index 676c37f903..79b7db2dda 100644 --- a/src/HtmlCss.test.tsx +++ b/src/HtmlCss.test.tsx @@ -12,7 +12,7 @@ describe("Some HTML Elements are added.", () => { test("There is an image with alt text", () => { render(); - const image = screen.getByRole("image"); + const image = screen.getByRole("img"); expect(image).toBeInTheDocument(); expect(image).toHaveAttribute("alt"); }); From 8dff2b64a2efc0b1b49703077965fe5e334eab1a Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Mon, 31 Jan 2022 16:31:58 -0500 Subject: [PATCH 14/30] Updated CSS tests, left a note about additional tests --- src/HtmlCss.test.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx index 79b7db2dda..379fc8f449 100644 --- a/src/HtmlCss.test.tsx +++ b/src/HtmlCss.test.tsx @@ -30,6 +30,14 @@ describe("Some basic CSS is added.", () => { render(); expect(true); }); + + test("The background color of the header area is different", () => { + render(); + const banner = screen.getByRole("banner"); + expect(banner).not.toHaveStyle({ + "background-color": "rgb(40, 44, 52)" + }); + }); }); describe("Some Bootstrap Elements are added", () => { From b66d4de909f74de4cba160a6fff05b078b9b47cc Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Mon, 31 Jan 2022 16:32:13 -0500 Subject: [PATCH 15/30] See previous commit message --- src/HtmlCss.test.tsx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx index 379fc8f449..36767ad350 100644 --- a/src/HtmlCss.test.tsx +++ b/src/HtmlCss.test.tsx @@ -26,11 +26,6 @@ describe("Some HTML Elements are added.", () => { }); describe("Some basic CSS is added.", () => { - test("There is a floating red box", () => { - render(); - expect(true); - }); - test("The background color of the header area is different", () => { render(); const banner = screen.getByRole("banner"); @@ -63,3 +58,7 @@ describe("Some Bootstrap Elements are added", () => { expect(consoleSpy).toHaveBeenCalledWith("Hello World!"); }); }); + +/** + * Remember, there are additional tasks described on the page! + */ From 0a24364f67b1ee221ebe175d6c494d5eca6ad7dc Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 24 Aug 2024 13:10:09 -0400 Subject: [PATCH 16/30] Add in new css test --- src/HtmlCss.test.tsx | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx index 36767ad350..48b0a6df2d 100644 --- a/src/HtmlCss.test.tsx +++ b/src/HtmlCss.test.tsx @@ -30,7 +30,7 @@ describe("Some basic CSS is added.", () => { render(); const banner = screen.getByRole("banner"); expect(banner).not.toHaveStyle({ - "background-color": "rgb(40, 44, 52)" + "background-color": "rgb(40, 44, 52)", }); }); }); @@ -59,6 +59,25 @@ describe("Some Bootstrap Elements are added", () => { }); }); -/** - * Remember, there are additional tasks described on the page! - */ +describe("Some additional CSS was added", () => { + test("checks if any element has a background color of red", () => { + const { container } = render(); + // Get all elements in the rendered container + const elements = container.querySelectorAll("*"); + + // Check if any element has a background color of red + let foundRedBackground = false; + + elements.forEach((element) => { + const style = getComputedStyle(element); + if ( + style.backgroundColor === "red" || + style.backgroundColor === "rgb(255, 0, 0)" + ) { + foundRedBackground = true; + } + }); + + expect(foundRedBackground).toBe(true); + }); +}); From 4d43d7a5d133522b0a8d92e1cb3d7e4053a81992 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 24 Aug 2024 13:12:28 -0400 Subject: [PATCH 17/30] Add in points --- src/HtmlCss.test.tsx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx index 48b0a6df2d..320cb97524 100644 --- a/src/HtmlCss.test.tsx +++ b/src/HtmlCss.test.tsx @@ -4,20 +4,20 @@ import App from "./App"; import userEvent from "@testing-library/user-event"; describe("Some HTML Elements are added.", () => { - test("There is a header", () => { + test("(2 pts) There is a header", () => { render(); const header = screen.getByRole("heading"); expect(header).toBeInTheDocument(); }); - test("There is an image with alt text", () => { + test("(2 pts) There is an image with alt text", () => { render(); const image = screen.getByRole("img"); expect(image).toBeInTheDocument(); expect(image).toHaveAttribute("alt"); }); - test("There is a list with at least three elements", () => { + test("(2 pts) There is a list with at least three elements", () => { render(); const list = screen.getByRole("list"); expect(list).toBeInTheDocument(); @@ -25,7 +25,7 @@ describe("Some HTML Elements are added.", () => { }); }); -describe("Some basic CSS is added.", () => { +describe("(2 pts) Some basic CSS is added.", () => { test("The background color of the header area is different", () => { render(); const banner = screen.getByRole("banner"); @@ -35,7 +35,7 @@ describe("Some basic CSS is added.", () => { }); }); -describe("Some Bootstrap Elements are added", () => { +describe("(2 pts) Some Bootstrap Elements are added", () => { test("There is one bootstrap button with the text 'Log Hello World'", () => { render(); const button = screen.getByRole("button", { name: /Log Hello World/i }); @@ -44,13 +44,13 @@ describe("Some Bootstrap Elements are added", () => { expect(button).toHaveClass("btn-primary"); }); - test("Not clicking the bootstrap button does not logs 'Hello World!'", () => { + test("(2 pts) Not clicking the bootstrap button does not logs 'Hello World!'", () => { const consoleSpy = jest.spyOn(console, "log"); render(); expect(consoleSpy).not.toHaveBeenCalledWith("Hello World!"); }); - test("Clicking the bootstrap button logs 'Hello World!'", () => { + test("(2 pts) Clicking the bootstrap button logs 'Hello World!'", () => { const consoleSpy = jest.spyOn(console, "log"); render(); const button = screen.getByRole("button", { name: /Log Hello World/i }); @@ -60,7 +60,7 @@ describe("Some Bootstrap Elements are added", () => { }); describe("Some additional CSS was added", () => { - test("checks if any element has a background color of red", () => { + test("(2 pts) checks if any element has a background color of red", () => { const { container } = render(); // Get all elements in the rendered container const elements = container.querySelectorAll("*"); From 83c4461f9dbe7d2a66c09eed18959565a302eea2 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 29 Jan 2022 23:23:45 -0500 Subject: [PATCH 18/30] Basic functions tests and stubs --- public/tasks/task-functions.md | 5 +++ src/functions.test.ts | 59 ++++++++++++++++++++++++++++++++++ src/functions.ts | 19 +++++++++++ 3 files changed, 83 insertions(+) create mode 100644 public/tasks/task-functions.md create mode 100644 src/functions.test.ts create mode 100644 src/functions.ts diff --git a/public/tasks/task-functions.md b/public/tasks/task-functions.md new file mode 100644 index 0000000000..36e7926bb7 --- /dev/null +++ b/public/tasks/task-functions.md @@ -0,0 +1,5 @@ +# Task - Functions + +Version: 0.0.1 + +Implement a bunch of functions that work on primitives. diff --git a/src/functions.test.ts b/src/functions.test.ts new file mode 100644 index 0000000000..e0bef414ea --- /dev/null +++ b/src/functions.test.ts @@ -0,0 +1,59 @@ +import { + add3, + fahrenheitToCelius, + shout, + isQuestion, + convertYesNo +} from "./functions"; + +test("Testing the basic functions", () => { + it("Testing the add3 function", () => { + expect(add3(1, 2, 3)).toBe(6); + expect(add3(9, 7, 4)).toBe(20); + expect(add3(6, -3, 9)).toBe(15); + expect(add3(10, 1, -9)).toBe(11); + expect(add3(-9, -100, -4)).toBe(0); + expect(add3(-1, -1, 1)).toBe(1); + }); + + it("Testing the fahrenheitToCelius function", () => { + expect(fahrenheitToCelius(32)).toBe(0); + expect(fahrenheitToCelius(-40)).toBe(40); + expect(fahrenheitToCelius(-22)).toBe(-30); + expect(fahrenheitToCelius(14)).toBe(-10); + expect(fahrenheitToCelius(68)).toBe(20); + expect(fahrenheitToCelius(86)).toBe(30); + expect(fahrenheitToCelius(212)).toBe(100); + }); + + it("Testing the shout function", () => { + expect(shout("Hello")).toBe("HELLO!"); + expect(shout("What?")).toBe("WHAT?!"); + expect(shout("oHo")).toBe("OHO!"); + expect(shout("AHHHH!!!")).toBe("AHHHH!!!!"); + expect(shout("")).toBe("!"); + expect(shout("Please go outside")).toBe("PLEASE GO OUTSIDE!"); + }); + + it("Testing the isQuestion function", () => { + expect(isQuestion("Is this a question?")).toBe(true); + expect(isQuestion("Who are you?")).toBe(true); + expect(isQuestion("WHAT ARE YOU !?")).toBe(true); + expect(isQuestion("WHAT IS THIS?!")).toBe(false); + expect(isQuestion("OH GOD!")).toBe(false); + expect(isQuestion("Oh nevermind, it's fine.")).toBe(false); + expect(isQuestion("")).toBe(false); + }); + + it("Testing the convertYesNo function", () => { + expect(convertYesNo("yes")).toBe(true); + expect(convertYesNo("YES")).toBe(true); + expect(convertYesNo("NO")).toBe(false); + expect(convertYesNo("no")).toBe(false); + expect(convertYesNo("Apple")).toBe(null); + expect(convertYesNo("Bananas")).toBe(null); + expect(convertYesNo("Nope")).toBe(null); + expect(convertYesNo("Yesterday")).toBe(null); + expect(convertYesNo("Maybe")).toBe(null); + }); +}); diff --git a/src/functions.ts b/src/functions.ts new file mode 100644 index 0000000000..03193e4212 --- /dev/null +++ b/src/functions.ts @@ -0,0 +1,19 @@ +export function fahrenheitToCelius(temperature: number): number { + return 0; +} + +export function add3(first: number, second: number, third: number): number { + return 0; +} + +export function shout(message: string): string { + return ""; +} + +export function isQuestion(message: string): boolean { + return true; +} + +export function convertYesNo(word: string): boolean | null { + return true; +} From a48653022ec3c8b7ce99cf49d98b041e20815420 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 29 Jan 2022 23:30:17 -0500 Subject: [PATCH 19/30] Fix test organization --- src/functions.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/functions.test.ts b/src/functions.test.ts index e0bef414ea..98c926bb6f 100644 --- a/src/functions.test.ts +++ b/src/functions.test.ts @@ -6,8 +6,8 @@ import { convertYesNo } from "./functions"; -test("Testing the basic functions", () => { - it("Testing the add3 function", () => { +describe("Testing the basic functions", () => { + test("Testing the add3 function", () => { expect(add3(1, 2, 3)).toBe(6); expect(add3(9, 7, 4)).toBe(20); expect(add3(6, -3, 9)).toBe(15); @@ -16,7 +16,7 @@ test("Testing the basic functions", () => { expect(add3(-1, -1, 1)).toBe(1); }); - it("Testing the fahrenheitToCelius function", () => { + test("Testing the fahrenheitToCelius function", () => { expect(fahrenheitToCelius(32)).toBe(0); expect(fahrenheitToCelius(-40)).toBe(40); expect(fahrenheitToCelius(-22)).toBe(-30); @@ -26,7 +26,7 @@ test("Testing the basic functions", () => { expect(fahrenheitToCelius(212)).toBe(100); }); - it("Testing the shout function", () => { + test("Testing the shout function", () => { expect(shout("Hello")).toBe("HELLO!"); expect(shout("What?")).toBe("WHAT?!"); expect(shout("oHo")).toBe("OHO!"); @@ -35,7 +35,7 @@ test("Testing the basic functions", () => { expect(shout("Please go outside")).toBe("PLEASE GO OUTSIDE!"); }); - it("Testing the isQuestion function", () => { + test("Testing the isQuestion function", () => { expect(isQuestion("Is this a question?")).toBe(true); expect(isQuestion("Who are you?")).toBe(true); expect(isQuestion("WHAT ARE YOU !?")).toBe(true); @@ -45,7 +45,7 @@ test("Testing the basic functions", () => { expect(isQuestion("")).toBe(false); }); - it("Testing the convertYesNo function", () => { + test("Testing the convertYesNo function", () => { expect(convertYesNo("yes")).toBe(true); expect(convertYesNo("YES")).toBe(true); expect(convertYesNo("NO")).toBe(false); From 9722564e99cecda5d50dd95524c94a76c4cda923 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 29 Jan 2022 23:39:22 -0500 Subject: [PATCH 20/30] Fix issue in fahrenheit conversion --- src/functions.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/functions.test.ts b/src/functions.test.ts index 98c926bb6f..3eb9f4f3aa 100644 --- a/src/functions.test.ts +++ b/src/functions.test.ts @@ -18,7 +18,7 @@ describe("Testing the basic functions", () => { test("Testing the fahrenheitToCelius function", () => { expect(fahrenheitToCelius(32)).toBe(0); - expect(fahrenheitToCelius(-40)).toBe(40); + expect(fahrenheitToCelius(-40)).toBe(-40); expect(fahrenheitToCelius(-22)).toBe(-30); expect(fahrenheitToCelius(14)).toBe(-10); expect(fahrenheitToCelius(68)).toBe(20); From bd06d5d0e3ed264f7bffb4e8e4811d0efc170255 Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Thu, 3 Feb 2022 14:27:08 -0500 Subject: [PATCH 21/30] Move around some of the functions --- src/functions.test.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/functions.test.ts b/src/functions.test.ts index 3eb9f4f3aa..c496ac7e99 100644 --- a/src/functions.test.ts +++ b/src/functions.test.ts @@ -7,15 +7,6 @@ import { } from "./functions"; describe("Testing the basic functions", () => { - test("Testing the add3 function", () => { - expect(add3(1, 2, 3)).toBe(6); - expect(add3(9, 7, 4)).toBe(20); - expect(add3(6, -3, 9)).toBe(15); - expect(add3(10, 1, -9)).toBe(11); - expect(add3(-9, -100, -4)).toBe(0); - expect(add3(-1, -1, 1)).toBe(1); - }); - test("Testing the fahrenheitToCelius function", () => { expect(fahrenheitToCelius(32)).toBe(0); expect(fahrenheitToCelius(-40)).toBe(-40); @@ -26,6 +17,15 @@ describe("Testing the basic functions", () => { expect(fahrenheitToCelius(212)).toBe(100); }); + test("Testing the add3 function", () => { + expect(add3(1, 2, 3)).toBe(6); + expect(add3(9, 7, 4)).toBe(20); + expect(add3(6, -3, 9)).toBe(15); + expect(add3(10, 1, -9)).toBe(11); + expect(add3(-9, -100, -4)).toBe(0); + expect(add3(-1, -1, 1)).toBe(1); + }); + test("Testing the shout function", () => { expect(shout("Hello")).toBe("HELLO!"); expect(shout("What?")).toBe("WHAT?!"); From 4cd1900783f690690229b7c17cf9e81995f52b3a Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Thu, 3 Feb 2022 14:27:18 -0500 Subject: [PATCH 22/30] Explain what the actual functions require you to do --- src/functions.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/functions.ts b/src/functions.ts index 03193e4212..e614c81c0c 100644 --- a/src/functions.ts +++ b/src/functions.ts @@ -1,19 +1,41 @@ +/** + * Consumes a single temperature in Fahrenheit (a number) and converts to Celsius + * using this formula: + * C = (F - 32) * 5/9 + */ export function fahrenheitToCelius(temperature: number): number { return 0; } +/** + * Consumes three numbers and produces their sum. BUT you should only add a number + * if the number is greater than zero. + */ export function add3(first: number, second: number, third: number): number { return 0; } +/** + * Consumes a string and produces the same string in UPPERCASE and with an exclamation + * mark added to the end. + */ export function shout(message: string): string { return ""; } +/** + * Consumes a string (a message) and returns a boolean if the string ends in a question + * mark. Do not use an `if` statement in solving this question. + */ export function isQuestion(message: string): boolean { return true; } +/** + * Consumes a word (a string) and returns either `true`, `false`, or `null`. If the string + * is "yes" (upper or lower case), then return `true`. If the string is "no" (again, either + * upper or lower case), then return `false`. Otherwise, return `null`. + */ export function convertYesNo(word: string): boolean | null { return true; } From cf1d21a31d00c2e8dc8bb7c76f372b3e0adebfbe Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 24 Aug 2024 13:15:59 -0400 Subject: [PATCH 23/30] Update formatting --- src/functions.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/functions.test.ts b/src/functions.test.ts index c496ac7e99..a082bfd61a 100644 --- a/src/functions.test.ts +++ b/src/functions.test.ts @@ -3,7 +3,7 @@ import { fahrenheitToCelius, shout, isQuestion, - convertYesNo + convertYesNo, } from "./functions"; describe("Testing the basic functions", () => { From e11693a366f61cdb442c6f6f5822bd49e2dd604f Mon Sep 17 00:00:00 2001 From: Austin Cory Bart Date: Sat, 24 Aug 2024 13:18:24 -0400 Subject: [PATCH 24/30] Add in points --- src/functions.test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/functions.test.ts b/src/functions.test.ts index a082bfd61a..3d921f5d64 100644 --- a/src/functions.test.ts +++ b/src/functions.test.ts @@ -7,7 +7,7 @@ import { } from "./functions"; describe("Testing the basic functions", () => { - test("Testing the fahrenheitToCelius function", () => { + test("(3 pts) Testing the fahrenheitToCelius function", () => { expect(fahrenheitToCelius(32)).toBe(0); expect(fahrenheitToCelius(-40)).toBe(-40); expect(fahrenheitToCelius(-22)).toBe(-30); @@ -17,7 +17,7 @@ describe("Testing the basic functions", () => { expect(fahrenheitToCelius(212)).toBe(100); }); - test("Testing the add3 function", () => { + test("(3 pts) Testing the add3 function", () => { expect(add3(1, 2, 3)).toBe(6); expect(add3(9, 7, 4)).toBe(20); expect(add3(6, -3, 9)).toBe(15); @@ -26,7 +26,7 @@ describe("Testing the basic functions", () => { expect(add3(-1, -1, 1)).toBe(1); }); - test("Testing the shout function", () => { + test("(3 pts) Testing the shout function", () => { expect(shout("Hello")).toBe("HELLO!"); expect(shout("What?")).toBe("WHAT?!"); expect(shout("oHo")).toBe("OHO!"); @@ -35,7 +35,7 @@ describe("Testing the basic functions", () => { expect(shout("Please go outside")).toBe("PLEASE GO OUTSIDE!"); }); - test("Testing the isQuestion function", () => { + test("(3 pts) Testing the isQuestion function", () => { expect(isQuestion("Is this a question?")).toBe(true); expect(isQuestion("Who are you?")).toBe(true); expect(isQuestion("WHAT ARE YOU !?")).toBe(true); @@ -45,7 +45,7 @@ describe("Testing the basic functions", () => { expect(isQuestion("")).toBe(false); }); - test("Testing the convertYesNo function", () => { + test("(3 pts) Testing the convertYesNo function", () => { expect(convertYesNo("yes")).toBe(true); expect(convertYesNo("YES")).toBe(true); expect(convertYesNo("NO")).toBe(false); From 80f1cf6ecfc7e83533d76aa3a68e364f2f0e0614 Mon Sep 17 00:00:00 2001 From: Greg Nelson Date: Tue, 17 Sep 2024 12:48:04 -0400 Subject: [PATCH 25/30] Update HtmlCss.test.tsx --- src/HtmlCss.test.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/HtmlCss.test.tsx b/src/HtmlCss.test.tsx index 320cb97524..84d76db400 100644 --- a/src/HtmlCss.test.tsx +++ b/src/HtmlCss.test.tsx @@ -4,10 +4,10 @@ import App from "./App"; import userEvent from "@testing-library/user-event"; describe("Some HTML Elements are added.", () => { - test("(2 pts) There is a header", () => { + test("(2 pts) There is a heading", () => { render(); - const header = screen.getByRole("heading"); - expect(header).toBeInTheDocument(); + const heading = screen.getAllByRole("heading"); + expect(heading[0]).toBeInTheDocument(); }); test("(2 pts) There is an image with alt text", () => { From 2aebdedb95ea72bc9a03442a76412e445167bb98 Mon Sep 17 00:00:00 2001 From: ckelley_17 Date: Tue, 9 Sep 2025 20:12:08 -0400 Subject: [PATCH 26/30] Added name to App --- src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.tsx b/src/App.tsx index a8b41197f2..68f7ebec86 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -9,7 +9,7 @@ function App(): React.JSX.Element {

Edit src/App.tsx and save. This page will - automatically reload. + automatically reload. Claire Kelley.

); From 4598d9415581494daea2ba4f0dae820df8557a67 Mon Sep 17 00:00:00 2001 From: ckelley_17 Date: Tue, 9 Sep 2025 20:22:58 -0400 Subject: [PATCH 27/30] Added Hello World to App --- src/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.tsx b/src/App.tsx index 68f7ebec86..8a9880e48b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -9,7 +9,7 @@ function App(): React.JSX.Element {

Edit src/App.tsx and save. This page will - automatically reload. Claire Kelley. + automatically reload. Claire Kelley. Hello World.

); From 1e54ce47928e49b84dc1df6fb3f32c6d2235888f Mon Sep 17 00:00:00 2001 From: ckelley_17 Date: Tue, 9 Sep 2025 20:28:02 -0400 Subject: [PATCH 28/30] Commiting with "Hello World" --- git | 0 package-lock.json | 123 +++++++++++++++++++++------------------------- 2 files changed, 57 insertions(+), 66 deletions(-) create mode 100644 git diff --git a/git b/git new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package-lock.json b/package-lock.json index 8c3779f487..1e6922997e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2153,7 +2153,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -2166,7 +2166,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -3273,7 +3273,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -3436,7 +3436,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -3454,7 +3454,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3470,7 +3470,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -3487,7 +3487,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3500,14 +3500,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -3517,7 +3517,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -3909,7 +3909,7 @@ "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@sinonjs/commons": { @@ -4222,7 +4222,6 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", @@ -4242,7 +4241,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4258,7 +4256,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -4275,7 +4272,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4288,14 +4284,12 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/@testing-library/dom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4305,7 +4299,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -4470,35 +4463,34 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, "license": "MIT" }, "node_modules/@types/babel__core": { @@ -4911,7 +4903,7 @@ "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -5508,7 +5500,7 @@ "version": "8.3.3", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -7210,7 +7202,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/cross-spawn": { @@ -7947,7 +7939,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -13021,7 +13013,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13031,7 +13023,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -13949,7 +13941,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -13959,7 +13951,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "chalk": "^4.0.0", @@ -13994,7 +13986,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -14010,7 +14002,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -14027,7 +14019,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -14040,14 +14032,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/jest-resolve/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -14057,7 +14049,7 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -14075,7 +14067,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -14518,7 +14510,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -14536,7 +14528,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -14552,7 +14544,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -14569,7 +14561,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -14582,14 +14574,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/jest-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -14599,7 +14591,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -14612,7 +14604,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -14630,7 +14622,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -14646,7 +14638,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -14659,7 +14651,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -14676,7 +14668,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -14689,14 +14681,14 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -14706,7 +14698,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -14721,7 +14713,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -14734,14 +14726,14 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -14850,7 +14842,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@types/node": "*", @@ -14866,7 +14858,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -14876,7 +14868,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -15368,7 +15360,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "dev": true, "license": "MIT", "bin": { "lz-string": "bin/bin.js" @@ -15402,7 +15393,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/makeerror": { @@ -20668,7 +20659,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -22588,7 +22579,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -22632,7 +22623,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/tsconfig-paths": { @@ -23056,7 +23047,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { @@ -24118,7 +24109,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=6" From 466feca5a809e74c117371c3aace5d2b504a3e49 Mon Sep 17 00:00:00 2001 From: ckelley_17 Date: Sun, 14 Sep 2025 20:12:25 -0400 Subject: [PATCH 29/30] first two functions done --- npm | 0 package-lock.json | 96 +++++++++++++++++++++++++++----------------- package.json | 3 +- src/App.css | 9 ++++- src/App.tsx | 41 +++++++++++++++++++ src/functions.ts | 10 ++++- src/images/caw2.jpg | Bin 0 -> 35359 bytes src/index.tsx | 5 ++- 8 files changed, 122 insertions(+), 42 deletions(-) create mode 100644 npm create mode 100644 src/images/caw2.jpg diff --git a/npm b/npm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/package-lock.json b/package-lock.json index 1e6922997e..83411b31c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,9 @@ "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", "@types/node": "^16.18.105", + "bootstrap": "^5.3.8", "react": "^18.3.1", - "react-bootstrap": "^2.10.4", + "react-bootstrap": "^2.10.10", "react-dom": "^18.3.1", "react-scripts": "5.0.1", "typescript": "^4.9.5", @@ -2086,13 +2087,10 @@ "license": "MIT" }, "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } @@ -3747,9 +3745,9 @@ } }, "node_modules/@react-aria/ssr": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.5.tgz", - "integrity": "sha512-xEwGKoysu+oXulibNUSkXf8itW0npHHTa6c4AyYeZIJyRoegeteYuFpZUBPtIDE8RfHdNsSmE1ssOkxRnwbkuQ==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" @@ -3758,7 +3756,7 @@ "node": ">= 12" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "node_modules/@restart/hooks": { @@ -3774,19 +3772,19 @@ } }, "node_modules/@restart/ui": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.8.0.tgz", - "integrity": "sha512-xJEOXUOTmT4FngTmhdjKFRrVVF0hwCLNPdatLCHkyS4dkiSK12cEu1Y0fjxktjJrdst9jJIc5J6ihMJCoWEN/g==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.9.4.tgz", + "integrity": "sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0", - "@popperjs/core": "^2.11.6", + "@babel/runtime": "^7.26.0", + "@popperjs/core": "^2.11.8", "@react-aria/ssr": "^3.5.0", - "@restart/hooks": "^0.4.9", - "@types/warning": "^3.0.0", + "@restart/hooks": "^0.5.0", + "@types/warning": "^3.0.3", "dequal": "^2.0.3", "dom-helpers": "^5.2.0", - "uncontrollable": "^8.0.1", + "uncontrollable": "^8.0.4", "warning": "^4.0.3" }, "peerDependencies": { @@ -3794,6 +3792,18 @@ "react-dom": ">=16.14.0" } }, + "node_modules/@restart/ui/node_modules/@restart/hooks": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.5.1.tgz", + "integrity": "sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/@restart/ui/node_modules/uncontrollable": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", @@ -4210,12 +4220,12 @@ } }, "node_modules/@swc/helpers": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz", - "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", "license": "Apache-2.0", "dependencies": { - "tslib": "^2.4.0" + "tslib": "^2.8.0" } }, "node_modules/@testing-library/dom": { @@ -6502,6 +6512,25 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "license": "ISC" }, + "node_modules/bootstrap": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.8.tgz", + "integrity": "sha512-HP1SZDqaLDPwsNiqRqi5NcP0SSXciX2s9E+RyqJIIqGo+vJeN5AJVM98CXmW/Wux0nQ5L7jeWUdplCEf0Ee+tg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -18312,14 +18341,15 @@ "license": "MIT" }, "node_modules/react-bootstrap": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.4.tgz", - "integrity": "sha512-W3398nBM2CBfmGP2evneEO3ZZwEMPtHs72q++eNw60uDGDAdiGn0f9yNys91eo7/y8CTF5Ke1C0QO8JFVPU40Q==", + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.10.tgz", + "integrity": "sha512-gMckKUqn8aK/vCnfwoBpBVFUGT9SVQxwsYrp9yDHt0arXMamxALerliKBxr1TPbntirK/HGrUAHYbAeQTa9GHQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.24.7", "@restart/hooks": "^0.4.9", - "@restart/ui": "^1.6.9", + "@restart/ui": "^1.9.4", + "@types/prop-types": "^15.7.12", "@types/react-transition-group": "^4.4.6", "classnames": "^2.3.2", "dom-helpers": "^5.2.1", @@ -20422,12 +20452,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", @@ -22660,9 +22684,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tsutils": { diff --git a/package.json b/package.json index fc2b66a549..a628ea40a4 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,9 @@ "@testing-library/user-event": "^13.5.0", "@types/jest": "^27.5.2", "@types/node": "^16.18.105", + "bootstrap": "^5.3.8", "react": "^18.3.1", - "react-bootstrap": "^2.10.4", + "react-bootstrap": "^2.10.10", "react-dom": "^18.3.1", "react-scripts": "5.0.1", "typescript": "^4.9.5", diff --git a/src/App.css b/src/App.css index ad32fac073..b13540c730 100644 --- a/src/App.css +++ b/src/App.css @@ -13,9 +13,16 @@ } } +/*I WANTED TO MAKE IT MATCH SO I DID GOOGLE THIS STUFF */ +.black-button { + background-color: #000000 !important; + border-color: #000000 !important; + color: #ffffff !important; +} + .App-header { width: 100%; - background-color: #282c34; + background-color: #000000; min-height: 40vh; display: flex; flex-direction: column; diff --git a/src/App.tsx b/src/App.tsx index 8a9880e48b..38ea2fcb44 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,5 +1,7 @@ import React from "react"; import "./App.css"; +import caw2 from "./images/caw2.jpg"; +import { Container, Row, Col, Button } from "react-bootstrap"; function App(): React.JSX.Element { return ( @@ -7,10 +9,49 @@ function App(): React.JSX.Element {
UM COS420 with React Hooks and TypeScript
+

CAWWW

Edit src/App.tsx and save. This page will automatically reload. Claire Kelley. Hello World.

+ + + +
+ Caw? Caw caw caw. Caaaaw. + + +
+
    +
  • One For Sorrow,
  • +
  • Two for joy,
  • +
  • Three For a Girl,
  • +
  • Four For a Boy.
  • +
+ + + + +
); } diff --git a/src/functions.ts b/src/functions.ts index e614c81c0c..bff6cbcc54 100644 --- a/src/functions.ts +++ b/src/functions.ts @@ -4,7 +4,7 @@ * C = (F - 32) * 5/9 */ export function fahrenheitToCelius(temperature: number): number { - return 0; + return (temperature - 32) * (5 / 9); } /** @@ -12,7 +12,13 @@ export function fahrenheitToCelius(temperature: number): number { * if the number is greater than zero. */ export function add3(first: number, second: number, third: number): number { - return 0; + let TOT: number = 0; + + if (first > 0) TOT += first; + if (second > 0) TOT += second; + if (third > 0) TOT += third; + + return TOT; } /** diff --git a/src/images/caw2.jpg b/src/images/caw2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..96186e573f96fafa844fc301134c0b5d75357af5 GIT binary patch literal 35359 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 H@BIG*FyYGZ literal 0 HcmV?d00001 diff --git a/src/index.tsx b/src/index.tsx index 425e1730ae..1a2ddcd67b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -5,14 +5,15 @@ import ReactDOM from "react-dom/client"; import "./index.css"; import App from "./App"; import reportWebVitals from "./reportWebVitals"; +import "bootstrap/dist/css/bootstrap.min.css"; const root = ReactDOM.createRoot( - document.getElementById("root") as HTMLElement + document.getElementById("root") as HTMLElement, ); root.render( - + , ); // If you want to start measuring performance in your app, pass a function From b4325f52589665b244ba83f041f2d8bcb38f9b9e Mon Sep 17 00:00:00 2001 From: ckelley_17 Date: Sun, 14 Sep 2025 20:42:17 -0400 Subject: [PATCH 30/30] final functions for this test done --- src/functions.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/functions.ts b/src/functions.ts index bff6cbcc54..ebd306eae3 100644 --- a/src/functions.ts +++ b/src/functions.ts @@ -26,15 +26,17 @@ export function add3(first: number, second: number, third: number): number { * mark added to the end. */ export function shout(message: string): string { - return ""; + return message.toUpperCase() + "!"; } /** * Consumes a string (a message) and returns a boolean if the string ends in a question * mark. Do not use an `if` statement in solving this question. + * + * Used this site to grab the syntax. https://pythonexamples.org/typescript/how-to-get-last-character-in-string */ export function isQuestion(message: string): boolean { - return true; + return message[message.length - 1] === "?"; } /** @@ -43,5 +45,12 @@ export function isQuestion(message: string): boolean { * upper or lower case), then return `false`. Otherwise, return `null`. */ export function convertYesNo(word: string): boolean | null { - return true; + const low = word.toLowerCase(); + if (low === "yes") { + return true; + } else if (low === "no") { + return false; + } else { + return null; + } }