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