48924688c7
* init * add: vite dev build working * fix: href serving from public * feat: add ejs plugin * feat: migrated env files and ejs templating * chore: add types related to envs * chore: add vite-env types * feat: support vite pwa * chore: upgrade vite pwa * chore: pin node version to 16.18.1 * chore: preserve use of nodejs 14 * refactor: preserve REACT_APP as env prefix * chore: support esm environment variables * fix ts config * use VITE prefix and remove vite-plugin-env-compatible * introduce import-meta-loader for building pacakge as webpack isn't compatible with import.meta syntax * lint * remove import.meta.env in main.js * set debug flag to false * migrate to vitest and use jest-canvas-mock 2.4.0 so its comp atible with vite * integrate vitest-ui * fix most of teh test * snaps * Add script for testing with vite ui * fix all tests related to mocking * fix more test * fix more * fix flip.test.tsx * fix contentxmenu snaps * fix regression snaps * fix excalidraw.test.tsx and this makes all tests finally pass :) * use node 16 * specify node version * use node 16 in lint as well * fix mobile.test.tsx * use node 16 * add style-loader * upgrade to node 18 * fix lint package.json * support eslint with vite * fix lint * fix lint * fix ts * remove pwa/sw stuff * use env vars in EJS the vite way * fix lint * move remainig jest mock/spy to vite * don't cache locales * fix regex * add fonts cache * tweak * add custom service worker * upgrade vite and create font cache again * cache fonts.css and locales * tweak * use manifestTransforms for filtering locales * use assets js pattern for locales * add font.css to globIgnore so its pushed to fonts cache * create a separate chunk for locales with rollup * remove manifestTransforms and fix glob pattern for locales to filter from workbox pre-cache * push sourcemaps in production * add comments in config * lint * use node 18 * disable pwa in dev * fix * fix * increase limit of bundle * upgrade vite-pwa to latest * remove public/workbox so workbox assets are not precached * fon't club en.json and percentages.json with manual locales chunk to fix first load+offline mode * tweak regex * remove happy-dom as its not used * add comment * use any instead of ts-ignore * cleanup * remove jest-canvas-mock resolution as vite-canvas-mock was patched locking deps at 2.4.0 * use same theme color present in entry point * remove vite-plugin-eslint as it improves DX significantly * integrate vite-plugin-checker for ts errors * add nabla/vite-plugin-eslint * use eslint from checker only * add env variable VITE_APP_COLLAPSE_OVERLAY for collapsing the checker overlay * tweak vite checker overlay badge position * Enable eslint behind flag as its not working well with windows with non WSL * make port configurable * open the browser when server ready * enable eslint by default --------- Co-authored-by: Weslley Braga <weslley@bambee.com> Co-authored-by: dwelle <luzar.david@gmail.com>
68 lines
2.8 KiB
TypeScript
68 lines
2.8 KiB
TypeScript
import { vi } from "vitest";
|
|
import { getPerfectElementSize } from "./sizeHelpers";
|
|
import * as constants from "../constants";
|
|
|
|
const EPSILON_DIGITS = 3;
|
|
// Needed so that we can mock the value of constants which is done in
|
|
// below tests. In Jest this wasn't needed as global override was possible
|
|
// but vite doesn't allow that hence we need to mock
|
|
vi.mock(
|
|
"../constants.ts",
|
|
//@ts-ignore
|
|
async (importOriginal) => {
|
|
const module: any = await importOriginal();
|
|
return { ...module };
|
|
},
|
|
);
|
|
describe("getPerfectElementSize", () => {
|
|
it("should return height:0 if `elementType` is line and locked angle is 0", () => {
|
|
const { height, width } = getPerfectElementSize("line", 149, 10);
|
|
expect(width).toBeCloseTo(149, EPSILON_DIGITS);
|
|
expect(height).toBeCloseTo(0, EPSILON_DIGITS);
|
|
});
|
|
|
|
it("should return width:0 if `elementType` is line and locked angle is 90 deg (Math.PI/2)", () => {
|
|
const { height, width } = getPerfectElementSize("line", 10, 140);
|
|
expect(width).toBeCloseTo(0, EPSILON_DIGITS);
|
|
expect(height).toBeCloseTo(140, EPSILON_DIGITS);
|
|
});
|
|
|
|
it("should return height:0 if `elementType` is arrow and locked angle is 0", () => {
|
|
const { height, width } = getPerfectElementSize("arrow", 200, 20);
|
|
expect(width).toBeCloseTo(200, EPSILON_DIGITS);
|
|
expect(height).toBeCloseTo(0, EPSILON_DIGITS);
|
|
});
|
|
it("should return width:0 if `elementType` is arrow and locked angle is 90 deg (Math.PI/2)", () => {
|
|
const { height, width } = getPerfectElementSize("arrow", 10, 100);
|
|
expect(width).toBeCloseTo(0, EPSILON_DIGITS);
|
|
expect(height).toBeCloseTo(100, EPSILON_DIGITS);
|
|
});
|
|
|
|
it("should return adjust height to be width * tan(locked angle)", () => {
|
|
const { height, width } = getPerfectElementSize("arrow", 120, 185);
|
|
expect(width).toBeCloseTo(120, EPSILON_DIGITS);
|
|
expect(height).toBeCloseTo(207.846, EPSILON_DIGITS);
|
|
});
|
|
|
|
it("should return height equals to width if locked angle is 45 deg", () => {
|
|
const { height, width } = getPerfectElementSize("arrow", 135, 145);
|
|
expect(width).toBeCloseTo(135, EPSILON_DIGITS);
|
|
expect(height).toBeCloseTo(135, EPSILON_DIGITS);
|
|
});
|
|
|
|
it("should return height:0 and width:0 when width and height are 0", () => {
|
|
const { height, width } = getPerfectElementSize("arrow", 0, 0);
|
|
expect(width).toBeCloseTo(0, EPSILON_DIGITS);
|
|
expect(height).toBeCloseTo(0, EPSILON_DIGITS);
|
|
});
|
|
|
|
describe("should respond to SHIFT_LOCKING_ANGLE constant", () => {
|
|
it("should have only 2 locking angles per section if SHIFT_LOCKING_ANGLE = 45 deg (Math.PI/4)", () => {
|
|
(constants as any).SHIFT_LOCKING_ANGLE = Math.PI / 4;
|
|
const { height, width } = getPerfectElementSize("arrow", 120, 185);
|
|
expect(width).toBeCloseTo(120, EPSILON_DIGITS);
|
|
expect(height).toBeCloseTo(120, EPSILON_DIGITS);
|
|
});
|
|
});
|
|
});
|