Passed
Push — main ( 394b21...fd6a98 )
by Andrii
02:09
created

__tests__/versus-classnames.test.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 56
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 46
mnd 2
bc 2
fnc 0
dl 0
loc 56
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 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