@@ -3,6 +3,14 @@ import { classNamesCheck, classNamingCtx } from "."
33import expectToRender from "../expect-to-render"
44import { ClassNames } from "./defs"
55
6+ const { classNames} : ClassNames < typeof App > = {
7+ classNames : {
8+ "App__Item" : "hash" ,
9+ class1 : "hash1" ,
10+ class2 : "hash2"
11+ }
12+ }
13+
614function Component ( props : ClassNames < true , "class1" | "class2" > ) {
715 const classes = classNamingCtx ( props )
816 return < >
@@ -23,29 +31,70 @@ function App({classNames, className}: ClassNames<true, "App__Item", typeof Compo
2331}
2432
2533describe ( classNamingCtx . name , ( ) => {
26- it ( "demo " , ( ) => expectToRender (
34+ it ( "not module " , ( ) => expectToRender (
2735 < App className = "MyApp" classNames = { classNamesCheck ( ) } /> ,
2836 [
2937 '<div class="MyApp App__Item class1"></div>' ,
3038 '<div class="class2"></div>'
3139 ]
3240 ) )
3341
34- it ( "forget className" , ( ) => expectToRender (
35- //@ts -expect-error Property 'className' is missing
36- < App classNames = { classNamesCheck ( ) } /> ,
37- [
38- '<div class="App__Item class1"></div>' ,
39- '<div class="class2"></div>'
40- ]
41- ) )
42- it ( "forget classNames" , ( ) => expectToRender (
43- //@ts -expect-error Property 'classNames' is missing
44- < App className = { "MyApp" } /> ,
42+ it ( "css module" , ( ) => expectToRender (
43+ < App className = "MyApp" classNames = { classNames } /> ,
4544 [
46- '<div class="MyApp App__Item class1 "></div>' ,
47- '<div class="class2 "></div>'
48- ]
45+ '<div class="MyApp hash hash1 "></div>' ,
46+ '<div class="hash2 "></div>'
47+ ]
4948 ) )
5049
50+ it ( "propagate classNames by option" , ( ) => {
51+ const App = ( { classNames, className} : ClassNames < true , "App__Item" , typeof Component > ) =>
52+ //@ts -expect-error //TODO Types of property 'classNames' are incompatible.
53+ < Component {
54+ ...classNamingCtx (
55+ { classNames, className} ,
56+ { withClassNames : true }
57+ ) (
58+ true , "App__Item"
59+ ) } />
60+
61+ expectToRender (
62+ < App className = "MyApp" classNames = { classNames } /> ,
63+ [
64+ '<div class="MyApp hash hash1"></div>' ,
65+ '<div class="hash2"></div>'
66+ ]
67+ )
68+ } )
69+
70+ it ( "not propagate classNames" , ( ) => {
71+ const App = ( { classNames, className} : ClassNames < true , "App__Item" , typeof Component > ) =>
72+ //@ts -expect-error Types of property 'classNames' are incompatible Type 'undefined' is not assignable
73+ < Component {
74+ ...classNamingCtx ( {
75+ classNames, className
76+ } ) (
77+ true , "App__Item"
78+ ) } />
79+
80+ expectToRender (
81+ < App className = "MyApp" classNames = { classNames } /> ,
82+ [
83+ '<div class="MyApp hash class1"></div>' ,
84+ '<div class="class2"></div>'
85+ ]
86+ )
87+ } )
88+
89+ it ( "propagate wrongly to leaf element" , ( ) => {
90+ const Component = ( { classNames} : ClassNames < "class1" > ) =>
91+ < div {
92+ ...classNamingCtx ( { classNames} , { withClassNames : true } ) ( "class1" )
93+ } />
94+
95+ expectToRender (
96+ < Component classNames = { classNames } /> ,
97+ '<div class="hash1" classNames=""></div>'
98+ )
99+ } )
51100} )
0 commit comments