Skip to content

Commit 73bc4eb

Browse files
committed
chore(utils): Additional test coverage
1 parent 7eb6740 commit 73bc4eb

File tree

5 files changed

+197
-44
lines changed

5 files changed

+197
-44
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
5+
import { unitToNumber } from "../unitToNumber";
6+
7+
describe("unitToNumber", () => {
8+
it("should return the correct value for numbers and px strings", () => {
9+
expect(typeof document).toBe("undefined");
10+
expect(unitToNumber(0)).toBe(0);
11+
expect(unitToNumber(1)).toBe(1);
12+
expect(unitToNumber(-16)).toBe(-16);
13+
14+
expect(unitToNumber("0")).toBe(0);
15+
expect(unitToNumber("-4px")).toBe(-4);
16+
expect(unitToNumber("16px")).toBe(16);
17+
});
18+
19+
it("should multiply fontSizeFallback or 16 to the value if the document is undefined for non-px strings", () => {
20+
expect(typeof document).toBe("undefined");
21+
expect(unitToNumber("1em")).toBe(16);
22+
expect(unitToNumber(".5em")).toBe(8);
23+
expect(unitToNumber("1em", { fontSizeFallback: 12 })).toBe(12);
24+
expect(unitToNumber(".5em", { fontSizeFallback: 12 })).toBe(6);
25+
});
26+
});
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { unitToNumber } from "../unitToNumber";
2+
3+
describe("unitToNumber", () => {
4+
it("should return the correct value for numbers and px strings", () => {
5+
expect(unitToNumber(0)).toBe(0);
6+
expect(unitToNumber(1)).toBe(1);
7+
expect(unitToNumber(-16)).toBe(-16);
8+
9+
expect(unitToNumber("0")).toBe(0);
10+
expect(unitToNumber("-4px")).toBe(-4);
11+
expect(unitToNumber("16px")).toBe(16);
12+
});
13+
14+
it("should parse the fontSize style for em/rem units", () => {
15+
const defaultStyle = window.getComputedStyle(document.documentElement);
16+
const getComputedStyle = jest
17+
.spyOn(window, "getComputedStyle")
18+
.mockImplementation((element) => {
19+
if (element === document.documentElement) {
20+
return {
21+
...defaultStyle,
22+
fontSize: "13px",
23+
};
24+
}
25+
26+
return {
27+
...defaultStyle,
28+
fontSize: "14px",
29+
};
30+
});
31+
32+
const container = document.createElement("div");
33+
const element = document.createElement("div");
34+
container.appendChild(element);
35+
36+
expect(unitToNumber("1.5em")).toBe(19.5);
37+
expect(unitToNumber(".5em")).toBe(6.5);
38+
expect(unitToNumber("1.5rem")).toBe(19.5);
39+
expect(unitToNumber(".5rem")).toBe(6.5);
40+
41+
expect(unitToNumber("1.5em", { element })).toBe(21);
42+
expect(unitToNumber(".5em", { element })).toBe(7);
43+
expect(unitToNumber("1.5rem", { element })).toBe(19.5);
44+
expect(unitToNumber(".5rem", { element })).toBe(6.5);
45+
46+
getComputedStyle.mockRestore();
47+
});
48+
});

packages/utils/src/layout/__tests__/GridList.tsx

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
/* eslint-disable no-underscore-dangle */
2+
import { ReactElement } from "react";
23
import { act, render } from "@testing-library/react";
34
import { ResizeObserver } from "@juggle/resize-observer";
45
import { mocked } from "ts-jest/utils";
56

6-
import { GridList } from "../GridList";
7+
import { GridList, GridListProps } from "../GridList";
78
import { useGridListSize } from "../useGridList";
89

910
jest.mock("@juggle/resize-observer");
@@ -244,4 +245,24 @@ describe("GridList", () => {
244245
</div>
245246
`);
246247
});
248+
249+
it("should allow for all the children to be wrapped in the GridListCell component", () => {
250+
function Test({
251+
clone,
252+
wrapOnly,
253+
}: Omit<GridListProps, "children">): ReactElement {
254+
return (
255+
<GridList clone={clone} wrapOnly={wrapOnly}>
256+
<div>Child 1</div>
257+
<div>Child 2</div>
258+
</GridList>
259+
);
260+
}
261+
262+
const { container, rerender } = render(<Test clone />);
263+
expect(container).toMatchSnapshot();
264+
265+
rerender(<Test wrapOnly />);
266+
expect(container).toMatchSnapshot();
267+
});
247268
});

packages/utils/src/layout/__tests__/__snapshots__/GridList.tsx.snap

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,49 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3+
exports[`GridList should allow for all the children to be wrapped in the GridListCell component 1`] = `
4+
<div>
5+
<div
6+
class="rmd-grid-list"
7+
style="--rmd-cell-size: 150px;"
8+
>
9+
<div
10+
class="rmd-grid-list__cell"
11+
>
12+
Child 1
13+
</div>
14+
<div
15+
class="rmd-grid-list__cell"
16+
>
17+
Child 2
18+
</div>
19+
</div>
20+
</div>
21+
`;
22+
23+
exports[`GridList should allow for all the children to be wrapped in the GridListCell component 2`] = `
24+
<div>
25+
<div
26+
class="rmd-grid-list"
27+
style="--rmd-cell-size: 150px;"
28+
>
29+
<div
30+
class="rmd-grid-list__cell"
31+
>
32+
<div>
33+
Child 1
34+
</div>
35+
</div>
36+
<div
37+
class="rmd-grid-list__cell"
38+
>
39+
<div>
40+
Child 2
41+
</div>
42+
</div>
43+
</div>
44+
</div>
45+
`;
46+
347
exports[`GridList should render correctly... (lazy test) 1`] = `
448
<div>
549
<div
Lines changed: 57 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,30 @@
1+
import {
2+
ABOVE_CENTER_ANCHOR,
3+
ABOVE_INNER_LEFT_ANCHOR,
4+
ABOVE_INNER_RIGHT_ANCHOR,
5+
ABOVE_LEFT_ANCHOR,
6+
ABOVE_RIGHT_ANCHOR,
7+
BELOW_CENTER_ANCHOR,
8+
BELOW_INNER_LEFT_ANCHOR,
9+
BELOW_INNER_RIGHT_ANCHOR,
10+
BELOW_LEFT_ANCHOR,
11+
BELOW_RIGHT_ANCHOR,
12+
BOTTOM_CENTER_ANCHOR,
13+
BOTTOM_INNER_LEFT_ANCHOR,
14+
BOTTOM_INNER_RIGHT_ANCHOR,
15+
BOTTOM_LEFT_ANCHOR,
16+
BOTTOM_RIGHT_ANCHOR,
17+
CENTER_CENTER_ANCHOR,
18+
CENTER_INNER_LEFT_ANCHOR,
19+
CENTER_INNER_RIGHT_ANCHOR,
20+
CENTER_LEFT_ANCHOR,
21+
CENTER_RIGHT_ANCHOR,
22+
TOP_CENTER_ANCHOR,
23+
TOP_INNER_LEFT_ANCHOR,
24+
TOP_INNER_RIGHT_ANCHOR,
25+
TOP_LEFT_ANCHOR,
26+
TOP_RIGHT_ANCHOR,
27+
} from "../constants";
128
import { getTransformOrigin } from "../getTransformOrigin";
229

330
const TOP_LEFT = "0 0";
@@ -14,72 +41,59 @@ const BOTTOM_RIGHT = "100% 100%";
1441

1542
describe("getTransformOrigin", () => {
1643
it('should position the "right below", "right top", "inner-left below", and "inner-left top" anchors to the top left origin', () => {
17-
expect(getTransformOrigin({ x: "right", y: "below" })).toBe(TOP_LEFT);
18-
expect(getTransformOrigin({ x: "right", y: "top" })).toBe(TOP_LEFT);
19-
expect(getTransformOrigin({ x: "inner-left", y: "below" })).toBe(TOP_LEFT);
20-
expect(getTransformOrigin({ x: "inner-left", y: "top" })).toBe(TOP_LEFT);
44+
expect(getTransformOrigin(BELOW_RIGHT_ANCHOR)).toBe(TOP_LEFT);
45+
expect(getTransformOrigin(TOP_RIGHT_ANCHOR)).toBe(TOP_LEFT);
46+
expect(getTransformOrigin(BELOW_INNER_LEFT_ANCHOR)).toBe(TOP_LEFT);
47+
expect(getTransformOrigin(TOP_INNER_LEFT_ANCHOR)).toBe(TOP_LEFT);
2148
});
2249

2350
it('should position the "center below" and "center top" anchors to the top center origin ("50% 0")', () => {
24-
expect(getTransformOrigin({ x: "center", y: "below" })).toBe(TOP_CENTER);
25-
expect(getTransformOrigin({ x: "center", y: "top" })).toBe(TOP_CENTER);
51+
expect(getTransformOrigin(BELOW_CENTER_ANCHOR)).toBe(TOP_CENTER);
52+
expect(getTransformOrigin(TOP_CENTER_ANCHOR)).toBe(TOP_CENTER);
2653
});
2754

2855
it('should position the "inner-right below", "inner-right top", "left below", and "left top" anchors to the top right origin ("100% 0")', () => {
29-
expect(getTransformOrigin({ x: "inner-right", y: "below" })).toBe(
30-
TOP_RIGHT
31-
);
32-
expect(getTransformOrigin({ x: "inner-right", y: "top" })).toBe(TOP_RIGHT);
33-
expect(getTransformOrigin({ x: "left", y: "below" })).toBe(TOP_RIGHT);
34-
expect(getTransformOrigin({ x: "left", y: "top" })).toBe(TOP_RIGHT);
56+
expect(getTransformOrigin(BELOW_INNER_RIGHT_ANCHOR)).toBe(TOP_RIGHT);
57+
expect(getTransformOrigin(TOP_INNER_RIGHT_ANCHOR)).toBe(TOP_RIGHT);
58+
expect(getTransformOrigin(BELOW_LEFT_ANCHOR)).toBe(TOP_RIGHT);
59+
expect(getTransformOrigin(TOP_LEFT_ANCHOR)).toBe(TOP_RIGHT);
3560
});
3661

3762
it('should position the "right center" and "inner-right center" anchors to the center left origin ("0 50%")', () => {
38-
expect(getTransformOrigin({ x: "right", y: "center" })).toBe(CENTER_LEFT);
39-
expect(getTransformOrigin({ x: "inner-left", y: "center" })).toBe(
40-
CENTER_LEFT
41-
);
63+
expect(getTransformOrigin(CENTER_RIGHT_ANCHOR)).toBe(CENTER_LEFT);
64+
expect(getTransformOrigin(CENTER_INNER_LEFT_ANCHOR)).toBe(CENTER_LEFT);
4265
});
4366

4467
it('should position the "center center" anchor to the absolute center origin ("50% 50%")', () => {
45-
expect(getTransformOrigin({ x: "center", y: "center" })).toBe(
46-
CENTER_CENTER
47-
);
68+
expect(getTransformOrigin(CENTER_CENTER_ANCHOR)).toBe(CENTER_CENTER);
4869
});
4970

5071
it('should position the "inner-right center" and "left center" anchors to the center right origin ("100% 50%")', () => {
51-
expect(getTransformOrigin({ x: "inner-right", y: "center" })).toBe(
52-
CENTER_RIGHT
53-
);
54-
expect(getTransformOrigin({ x: "left", y: "center" })).toBe(CENTER_RIGHT);
72+
expect(getTransformOrigin(CENTER_INNER_RIGHT_ANCHOR)).toBe(CENTER_RIGHT);
73+
expect(getTransformOrigin(CENTER_LEFT_ANCHOR)).toBe(CENTER_RIGHT);
5574
});
5675

5776
it('should position the "right above", "right bottom", "inner-left above", and "inner-left bottom" anchors to the bottom left origin ("0 100%")', () => {
58-
expect(getTransformOrigin({ x: "right", y: "above" })).toBe(BOTTOM_LEFT);
59-
expect(getTransformOrigin({ x: "right", y: "bottom" })).toBe(BOTTOM_LEFT);
60-
expect(getTransformOrigin({ x: "inner-left", y: "above" })).toBe(
61-
BOTTOM_LEFT
62-
);
63-
expect(getTransformOrigin({ x: "inner-left", y: "bottom" })).toBe(
64-
BOTTOM_LEFT
65-
);
77+
expect(getTransformOrigin(ABOVE_RIGHT_ANCHOR)).toBe(BOTTOM_LEFT);
78+
expect(getTransformOrigin(BOTTOM_RIGHT_ANCHOR)).toBe(BOTTOM_LEFT);
79+
expect(getTransformOrigin(ABOVE_INNER_LEFT_ANCHOR)).toBe(BOTTOM_LEFT);
80+
expect(getTransformOrigin(BOTTOM_INNER_LEFT_ANCHOR)).toBe(BOTTOM_LEFT);
6681
});
6782

6883
it('should position the "center above" and "center bottom" anchors to the bottom center origin ("50% 100%")', () => {
69-
expect(getTransformOrigin({ x: "center", y: "above" })).toBe(BOTTOM_CENTER);
70-
expect(getTransformOrigin({ x: "center", y: "bottom" })).toBe(
71-
BOTTOM_CENTER
72-
);
84+
expect(getTransformOrigin(ABOVE_CENTER_ANCHOR)).toBe(BOTTOM_CENTER);
85+
expect(getTransformOrigin(BOTTOM_CENTER_ANCHOR)).toBe(BOTTOM_CENTER);
7386
});
7487

7588
it('should position the "inner-right above", "inner-right bottom", "left above", and "left bottom" anchors to the bottom right origin ("100% 100%")', () => {
76-
expect(getTransformOrigin({ x: "inner-right", y: "above" })).toBe(
77-
BOTTOM_RIGHT
78-
);
79-
expect(getTransformOrigin({ x: "inner-right", y: "bottom" })).toBe(
80-
BOTTOM_RIGHT
81-
);
82-
expect(getTransformOrigin({ x: "left", y: "above" })).toBe(BOTTOM_RIGHT);
83-
expect(getTransformOrigin({ x: "left", y: "bottom" })).toBe(BOTTOM_RIGHT);
89+
expect(getTransformOrigin(ABOVE_INNER_RIGHT_ANCHOR)).toBe(BOTTOM_RIGHT);
90+
expect(getTransformOrigin(BOTTOM_INNER_RIGHT_ANCHOR)).toBe(BOTTOM_RIGHT);
91+
expect(getTransformOrigin(ABOVE_LEFT_ANCHOR)).toBe(BOTTOM_RIGHT);
92+
expect(getTransformOrigin(BOTTOM_LEFT_ANCHOR)).toBe(BOTTOM_RIGHT);
93+
});
94+
95+
it("should default to 0 0 if an invalid anchor is provided", () => {
96+
// @ts-expect-error
97+
expect(getTransformOrigin({ x: "invalid", y: "invalid" })).toBe("0 0");
8498
});
8599
});

0 commit comments

Comments
 (0)