Total Complexity | 2 |
Complexity/F | 0 |
Lines of Code | 57 |
Function Count | 0 |
Duplicated Lines | 0 |
Ratio | 0 % |
Changes | 0 |
1 | import type {ClassNames} from "react-classnaming" |
||
2 | import classNaming from "react-classnaming" |
||
3 | |||
4 | import classnames_default from "classnames" |
||
5 | import classnames_bind from "classnames/bind" |
||
6 | |||
7 | import css from "./some.css" |
||
8 | import module from "./some.module.css" |
||
9 | import { ClassNamesProperty, ClassHash } from "react-classnaming/types" |
||
10 | |||
11 | const module_css: typeof module = { |
||
12 | "class1": "hash1", |
||
13 | "class2": "hash2" |
||
14 | } |
||
15 | |||
16 | it("usage interface", () => { |
||
17 | const { class1, |
||
18 | whatever |
||
19 | } = css |
||
20 | |||
21 | const props: ClassNames<ClassNamesProperty<{class2: ClassHash}>> = { |
||
22 | //@ts-expect-error |
||
23 | "classnames": css |
||
24 | } |
||
25 | |||
26 | const {classnames: {class2}} = props |
||
27 | , classes = classNaming() |
||
28 | expect({ |
||
29 | ...classes({class1, class2}) |
||
30 | }).toStrictEqual({ |
||
31 | //@ts-expect-error `classnames` has no possibility for type hints |
||
32 | className: classnames_default<"whatever">("class1", "class2") |
||
33 | }) |
||
34 | |||
35 | expect(class2 ?? whatever).toBe(undefined) |
||
36 | }) |
||
37 | |||
38 | it("css module", () => { |
||
39 | const classes = classNaming({classnames: module_css}) |
||
40 | |||
41 | expect({ |
||
42 | className: classnames_bind.bind(module_css)( |
||
43 | // No error on redundant CSS-class |
||
44 | {"class1": true}, |
||
45 | "class3" |
||
46 | ) |
||
47 | }).toStrictEqual({ |
||
48 | ...classes({ |
||
49 | class1: true, |
||
50 | //@ts-expect-error Argument of type '"class3"' is not assignable to parameter |
||
51 | class3: true |
||
52 | }) |
||
53 | }) |
||
54 | }) |
||
55 | |||
56 | it.todo("Does `classnames` have chainable interface?") |
||
57 |