Passed
Push — main ( cfdb31...3c28e5 )
by Andrii
02:37
created

src/versus-classnames.test.ts   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 58
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 47
dl 0
loc 58
rs 10
c 0
b 0
f 0
wmc 2
mnd 2
bc 2
fnc 0
bpm 0
cpm 0
noi 0
1
import type {ClassNames} from "."
2
import classNaming, { classNamesCheck } from "."
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 "./defs"
10
11
const module_css: typeof module = {
12
  "class1": "hash1",
13
  "class2": "hash2"
14
}
15
16
it("usage interface", () => {
17
  const { class1,
18
    //@ts-expect-error Property 'class3' does not exist
19
    whatever
20
  } = classNamesCheck<ClassNamesProperty<{class1: ClassHash; class2: ClassHash}>>(css)
21
  
22
  const props: ClassNames<ClassNamesProperty<{class2: ClassHash}>> = {
23
    //@ts-expect-error
24
    "classnames": css
25
  }
26
  
27
  const {classnames: {class2}} = props
28
  , classes = classNaming()
29
  expect({
30
    ...classes({class1, class2})
31
  }).toStrictEqual({
32
    //@ts-expect-error `classnames` has no possibility for type hints
33
    className:  classnames_default<"whatever">("class1", "class2")
34
  })
35
36
  expect(class2 ?? whatever).toBe(undefined)
37
})
38
39
it("css module", () => {
40
  const classes = classNaming({classnames: module_css})
41
  
42
  expect({
43
    className: classnames_bind.bind(module_css)(
44
      // No error on redundant CSS-class
45
      {"class1": true},
46
      "class3"
47
    )
48
  }).toStrictEqual({
49
    ...classes({
50
      class1: true,
51
      //@ts-expect-error  Argument of type '"class3"' is not assignable to parameter
52
      class3: true
53
    })
54
  })
55
})
56
57
it.todo("Does `classnames` have chainable interface?")
58