| Total Complexity | 2 |
| Complexity/F | 0 |
| Lines of Code | 50 |
| Function Count | 0 |
| Duplicated Lines | 0 |
| Ratio | 0 % |
| Changes | 0 | ||
| 1 | import type {ClassNames} from "." |
||
| 2 | import { |
||
| 3 | classNamesCheck, |
||
| 4 | classNamingBasic, |
||
| 5 | classNamingCtx |
||
| 6 | } from "." |
||
| 7 | |||
| 8 | import classnames_default from "classnames" |
||
| 9 | import classnames_bind from "classnames/bind" |
||
| 10 | |||
| 11 | import css from "./some.css" |
||
| 12 | import module from "./some.module.css" |
||
| 13 | const module_css: typeof module = { |
||
| 14 | "class1": "hash1", |
||
| 15 | "class2": "hash2" |
||
| 16 | } |
||
| 17 | |||
| 18 | it("usage interface", () => { |
||
| 19 | const { class1, |
||
| 20 | //@ts-expect-error Property 'class3' does not exist |
||
| 21 | whatever |
||
| 22 | } = classNamesCheck<"class1"|"class2">(css) |
||
| 23 | |||
| 24 | const props: ClassNames<"class2"> = {"classnames": css} |
||
| 25 | |||
| 26 | const {classnames: {class2}} = props |
||
| 27 | |||
| 28 | expect( |
||
| 29 | classNamingBasic({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", () => expect({ |
||
| 39 | className: classnames_bind.bind(module_css)( |
||
| 40 | // No error on redundant CSS-class |
||
| 41 | "class1", "class3" |
||
| 42 | ) |
||
| 43 | }).toStrictEqual( |
||
| 44 | classNamingCtx({classnames: module_css})( |
||
| 45 | "class1", |
||
| 46 | //@ts-expect-error Argument of type '"class3"' is not assignable to parameter |
||
| 47 | "class3" |
||
| 48 | ) |
||
| 49 | )) |
||
| 50 | |||
| 51 |