Passed
Push — main ( 8f901a...3322df )
by Andrii
02:33
created

src/check.test.tsx   A

Complexity

Total Complexity 2
Complexity/F 1

Size

Lines of Code 114
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 95
dl 0
loc 114
rs 10
c 0
b 0
f 0
wmc 2
mnd 0
bc 0
fnc 2
bpm 0
cpm 1
noi 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A check.test.tsx ➔ check2 0 5 1
A check.test.tsx ➔ check0 0 5 1
1
import React from "react"
2
import { classNamesCheck } from "./check"
3
import { EMPTY_OBJECT } from "./consts"
4
import { ClassHash, ClassNamesProperty, CssModule } from "./defs"
5
6
export {}
7
8
type ComponentClassNames = {App: ClassHash}
9
const Component = ({classnames: {App}}: ClassNamesProperty<ComponentClassNames>) => <div className={App}/>
10
11
const css_module_exact = {
12
  App: undefined
13
} //as {App: string|undefined}
14
, css_module = {
15
  App: undefined,
16
  "never-used": "bad"
17
}
18
19
it(classNamesCheck.name, () => {
20
  <Component classnames={classNamesCheck()} />;
21
  //@ts-expect-error Property 'App' is missing
22
  <Component classnames={classNamesCheck({})} />;
23
  <Component classnames={classNamesCheck(css_module_exact)} />;
24
  <Component classnames={classNamesCheck(css_module)} />;
25
  <Component classnames={classNamesCheck(css_module_exact, {} as ComponentClassNames)} />;
26
  <Component classnames={classNamesCheck<ComponentClassNames, typeof css_module_exact>(css_module_exact)} />;
27
  <Component classnames={classNamesCheck(
28
    css_module,
29
    //@ts-expect-error Property 'never-used' is missing
30
    {} as ComponentClassNames)
31
  } />;
32
33
  //@ts-expect-error Type 'CssModule' is not assignable to type 
34
  <Component classnames={classNamesCheck<
35
    ComponentClassNames
36
  >(css_module)} />;
37
38
  <Component classnames={classNamesCheck<
39
    //@ts-expect-error Type 'ComponentClassNames' does not satisfy the constraint
40
    ComponentClassNames,
41
    typeof css_module
42
  >(css_module)} />;
43
44
  expect(true).toBe(true)
45
})
46
47
it("research", () => {
48
  //@ts-expect-error Property 'App' is missing
49
  <Component classnames={{} as Record<string, ClassHash>} />;
50
  <Component classnames={{} as never} />;
51
  <Component classnames={{} as any} />;
52
  //@ts-expect-error Type 'unknown' is not assignable
53
  <Component classnames={{} as unknown} />;
54
  <Component classnames={{App: undefined,
55
    //@ts-expect-error Object literal may only specify known properties, and 'App__bad' does not exist
56
    App__bad: "bad"
57
  }} />;
58
  <Component classnames={css_module} />;
59
  <Component classnames={css_module as ComponentClassNames} />;
60
  expect(true).toBe(true)
61
})
62
63
it("check", () => {
64
  function check0<
65
    //@ts-expect-error
66
    C extends T,
67
    T extends CssModule = CssModule>(source = EMPTY_OBJECT as T) {
68
    return source
69
  }
70
71
  // function check0<C extends T, T extends CssModule = CssModule>(source = EMPTY_OBJECT as T) :C {
72
  //   return source as C
73
  // }
74
75
  <Component classnames={check0()} />;
76
  //@ts-expect-error Property 'App' is missing 
77
  <Component classnames={check0({})} />;
78
  <Component classnames={check0(css_module_exact)} />;
79
  //TODO #16 @ts-expect-error
80
  <Component classnames={check0(css_module)} />;
81
82
  //@ts-expect-error Property 'App' is missing in type 'CssModule'
83
  <Component classnames
84
    ={check0<ComponentClassNames>(css_module)} />;
85
86
  <Component classnames={check0<
87
    //@ts-expect-error Property 'never-used' is missing in type 'ComponentClassNames'
88
    ComponentClassNames,
89
    typeof css_module
90
  >(css_module)} />;
91
92
  function check2<T extends CssModule = CssModule, C extends {[K in keyof T]: ClassHash} = T>(
93
    source = EMPTY_OBJECT as T,
94
    _ = EMPTY_OBJECT as C
95
  ) {return source}
96
97
  <Component classnames={check2()} />;
98
  //@ts-expect-error Property 'App' is missing
99
  <Component classnames={check2({})} />;
100
  <Component classnames={check2(css_module_exact, {} as ComponentClassNames)} />;
101
  <Component classnames={check2<typeof css_module_exact, ComponentClassNames>(css_module_exact)} />;
102
  <Component classnames={check2(css_module,
103
    //@ts-expect-error Property 'never-used' is missing
104
    {} as ComponentClassNames)
105
  } />;
106
  <Component classnames={check2<
107
    typeof css_module,
108
    //@ts-expect-error Type 'ComponentClassNames' does not satisfy the constraint
109
    ComponentClassNames
110
  >(css_module)} />;
111
112
  expect(true).toBe(true)
113
})
114