Passed
Push — main ( 3322df...b61daa )
by Andrii
02:05
created

__tests__/versus-classnames.test.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 57
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 47
mnd 2
bc 2
fnc 0
dl 0
loc 57
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import type {ClassNames} 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
import { ClassNamesProperty, ClassHash } from "../src/defs"
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