@@ -14,144 +14,294 @@ describe('ClassToggler', () => {
1414 clearFixture ( )
1515 } )
1616
17- describe ( 'attach ' , ( ) => {
18- it ( 'should add the add-this- class class to c-app element' , done => {
17+ describe ( 'add ' , ( ) => {
18+ it ( 'should add the ` add-class` class to `. c-app` element' , done => {
1919 fixtureEl . innerHTML = [
2020 '<div class="c-app">' ,
21- ' <button type="button" class="c-class-toggler" data-target=".c-app" data-attach ="add-this -class"></div>' ,
21+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-add-class ="add-class"></div>' ,
2222 '</div>'
2323 ] . join ( '' )
2424
2525 const c = document . querySelector ( '.c-app' )
2626 const toggler = document . querySelector ( '.c-class-toggler' )
2727
28- c . addEventListener ( 'classattached ' , ( ) => {
29- expect ( c . classList . contains ( 'add-this- class' ) ) . toEqual ( true )
28+ c . addEventListener ( 'classadded ' , ( ) => {
29+ expect ( c . classList . contains ( 'add-class' ) ) . toEqual ( true )
3030 done ( )
3131 } )
3232
3333 toggler . click ( )
3434 } )
35+
36+ it ( 'should add `add-class1` and `add-class2` classes to `.c-app` element' , done => {
37+ fixtureEl . innerHTML = [
38+ '<div class="c-app">' ,
39+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-add-class="add-class1,add-class2"></div>' ,
40+ '</div>'
41+ ] . join ( '' )
42+
43+ const c = document . querySelector ( '.c-app' )
44+ const toggler = document . querySelector ( '.c-class-toggler' )
45+
46+ c . addEventListener ( 'classadded' , ( ) => {
47+ // eslint-disable-next-line max-nested-callbacks
48+ setTimeout ( ( ) => {
49+ expect ( c . classList . contains ( 'add-class1' ) ) . toEqual ( true )
50+ expect ( c . classList . contains ( 'add-class2' ) ) . toEqual ( true )
51+ done ( )
52+ } , 250 )
53+ } )
54+
55+ toggler . click ( )
56+ } )
3557 } )
3658
37- describe ( 'detach ' , ( ) => {
38- it ( 'should remove the add-this- class class from c-app element' , done => {
59+ describe ( 'remove ' , ( ) => {
60+ it ( 'should remove the `remove- class` class from `. c-app` element' , done => {
3961 fixtureEl . innerHTML = [
40- '<div class="c-app add-this -class">' ,
41- ' <button type="button" class="c-class-toggler" data-target=".c-app" data-detach="add-this -class"></div>' ,
62+ '<div class="c-app remove -class">' ,
63+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-remove-class="remove -class"></div>' ,
4264 '</div>'
4365 ] . join ( '' )
4466
4567 const c = document . querySelector ( '.c-app' )
4668 const toggler = document . querySelector ( '.c-class-toggler' )
4769
48- c . addEventListener ( 'classdetached ' , ( ) => {
49- expect ( c . classList . contains ( 'add-this -class' ) ) . toEqual ( false )
70+ c . addEventListener ( 'classremoved ' , ( ) => {
71+ expect ( c . classList . contains ( 'remove -class' ) ) . toEqual ( false )
5072 done ( )
5173 } )
5274
5375 toggler . click ( )
5476 } )
5577
56- it ( 'should remove following classes from tc-app element `test-xl-show`, `test-lg-show`, `test-md-show`, `test-sm-show`, `test-show`' , done => {
78+ it ( 'should remove `remove-class1`, `remove-class2` and ` remove-class2` classes from `.c-app` element' , done => {
79+ fixtureEl . innerHTML = [
80+ '<div class="c-app">' ,
81+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-remove-class="remove-class1,remove-class2, remove-class3"></div>' ,
82+ '</div>'
83+ ] . join ( '' )
84+
85+ const c = document . querySelector ( '.c-app' )
86+ const toggler = document . querySelector ( '.c-class-toggler' )
87+
88+ c . addEventListener ( 'classremoved' , ( ) => {
89+ // eslint-disable-next-line max-nested-callbacks
90+ setTimeout ( ( ) => {
91+ expect ( c . classList . contains ( 'remove-class1' ) ) . toEqual ( false )
92+ expect ( c . classList . contains ( 'remove-class2' ) ) . toEqual ( false )
93+ expect ( c . classList . contains ( 'remove-class3' ) ) . toEqual ( false )
94+ done ( )
95+ } , 250 )
96+ } )
97+
98+ toggler . click ( )
99+ } )
100+
101+ it ( 'should remove following classes from the `.c-app` element `test-xl-show`, `test-lg-show`, `test-md-show`, `test-sm-show`, `test-show`' , done => {
57102 fixtureEl . innerHTML = [
58103 '<div class="c-app test-xl-show test-lg-show test-md-show test-sm-show test-show">' ,
59- ' <button type="button" class="c-class-toggler" data-target=".c-app" data-detach ="test-xl-show" data-responsive="true"></div>' ,
104+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-remove-class ="test-xl-show" data-responsive="true"></div>' ,
60105 '</div>'
61106 ] . join ( '' )
62107
63108 const c = document . querySelector ( '.c-app' )
64109 const toggler = document . querySelector ( '.c-class-toggler' )
65110
66- c . addEventListener ( 'classdetached' , ( ) => {
67- setTimeout ( function ( ) {
111+ c . addEventListener ( 'classremoved' , ( ) => {
112+ // eslint-disable-next-line max-nested-callbacks
113+ setTimeout ( ( ) => {
68114 expect ( c . classList . contains ( 'test-xl-show' ) ) . toEqual ( false )
69115 expect ( c . classList . contains ( 'test-lg-show' ) ) . toEqual ( false )
70116 expect ( c . classList . contains ( 'test-md-show' ) ) . toEqual ( false )
71117 expect ( c . classList . contains ( 'test-sm-show' ) ) . toEqual ( false )
72118 expect ( c . classList . contains ( 'test-show' ) ) . toEqual ( false )
73119 done ( )
74- } , 1000 ) ;
120+ } , 250 )
121+ } )
122+
123+ toggler . click ( )
124+ } )
125+
126+ it ( 'should remove the `test-show` class from the `.c-app` element' , done => {
127+ fixtureEl . innerHTML = [
128+ '<div class="c-app test-show">' ,
129+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-remove-class="test-xl-show" data-responsive="true"></div>' ,
130+ '</div>'
131+ ] . join ( '' )
132+
133+ const c = document . querySelector ( '.c-app' )
134+ const toggler = document . querySelector ( '.c-class-toggler' )
75135
136+ c . addEventListener ( 'classremoved' , ( ) => {
137+ expect ( c . classList . contains ( 'test-show' ) ) . toEqual ( false )
138+ done ( )
76139 } )
77140
78141 toggler . click ( )
79142 } )
80143 } )
81144
82145 describe ( 'toggle' , ( ) => {
83- it ( 'should add the `toggle` class to c-app element' , done => {
146+ it ( 'should add the `toggle` class to `. c-app` element' , done => {
84147 fixtureEl . innerHTML = [
85148 '<div class="c-app">' ,
86- ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle="toggle"></div>' ,
149+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle-class ="toggle"></div>' ,
87150 '</div>'
88151 ] . join ( '' )
89152
90153 const c = document . querySelector ( '.c-app' )
91154 const toggler = document . querySelector ( '.c-class-toggler' )
92155
93- c . addEventListener ( 'classattached ' , ( ) => {
156+ c . addEventListener ( 'classtoggle ' , ( ) => {
94157 expect ( c . classList . contains ( 'toggle' ) ) . toEqual ( true )
95158 done ( )
96159 } )
97160
98161 toggler . click ( )
99162 } )
100163
101- it ( 'should remove the `toggle` class from c-app element' , done => {
164+ it ( 'should remove the `toggle` class from `. c-app` element' , done => {
102165 fixtureEl . innerHTML = [
103166 '<div class="c-app toggle">' ,
104- ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle="toggle"></div>' ,
167+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle-class ="toggle"></div>' ,
105168 '</div>'
106169 ] . join ( '' )
107170
108171 const c = document . querySelector ( '.c-app' )
109172 const toggler = document . querySelector ( '.c-class-toggler' )
110173
111- c . addEventListener ( 'classdetached ' , ( ) => {
174+ c . addEventListener ( 'classremoved ' , ( ) => {
112175 expect ( c . classList . contains ( 'toggle' ) ) . toEqual ( false )
113176 done ( )
114177 } )
115178
116179 toggler . click ( )
117180 } )
181+
182+ it ( 'should add the `add-class` to `.c-app` element and remove `remove-class`' , done => {
183+ fixtureEl . innerHTML = [
184+ '<div class="c-app remove-class">' ,
185+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle-class="add-class, remove-class"></div>' ,
186+ '</div>'
187+ ] . join ( '' )
188+
189+ const c = document . querySelector ( '.c-app' )
190+ const toggler = document . querySelector ( '.c-class-toggler' )
191+
192+ c . addEventListener ( 'classtoggle' , ( ) => {
193+ // eslint-disable-next-line max-nested-callbacks
194+ setTimeout ( ( ) => {
195+ expect ( c . classList . contains ( 'add-class' ) ) . toEqual ( true )
196+ expect ( c . classList . contains ( 'remove-class' ) ) . toEqual ( false )
197+ done ( )
198+ } , 250 )
199+ } )
200+
201+ toggler . click ( )
202+ } )
203+
204+ it ( 'should remove the `test-show` class from the `.c-app` element' , done => {
205+ fixtureEl . innerHTML = [
206+ '<div class="c-app test-show">' ,
207+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle-class="test-xl-show" data-responsive="true"></div>' ,
208+ '</div>'
209+ ] . join ( '' )
210+
211+ const c = document . querySelector ( '.c-app' )
212+ const toggler = document . querySelector ( '.c-class-toggler' )
213+
214+ c . addEventListener ( 'classtoggle' , ( ) => {
215+ // eslint-disable-next-line max-nested-callbacks
216+ setTimeout ( ( ) => {
217+ expect ( c . classList . contains ( 'test-show' ) ) . toEqual ( false )
218+ expect ( c . classList . contains ( 'test-xl-show' ) ) . toEqual ( false )
219+ done ( )
220+ } , 250 )
221+ } )
222+
223+ toggler . click ( )
224+ } )
225+
226+ it ( 'should remove the `test-show` class from the `.c-app` element and then add `text-xl-show`' , done => {
227+ fixtureEl . innerHTML = [
228+ '<div class="c-app test-show">' ,
229+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle-class="test-xl-show" data-responsive="true"></div>' ,
230+ '</div>'
231+ ] . join ( '' )
232+
233+ const c = document . querySelector ( '.c-app' )
234+ const toggler = document . querySelector ( '.c-class-toggler' )
235+
236+ c . addEventListener ( 'classremoved' , ( ) => {
237+ expect ( c . classList . contains ( 'test-show' ) ) . toEqual ( false )
238+ expect ( c . classList . contains ( 'test-xl-show' ) ) . toEqual ( false )
239+ } )
240+
241+ c . addEventListener ( 'classadded' , ( ) => {
242+ expect ( c . classList . contains ( 'test-show' ) ) . toEqual ( false )
243+ expect ( c . classList . contains ( 'test-xl-show' ) ) . toEqual ( true )
244+ done ( )
245+ } )
246+
247+ toggler . click ( )
248+ toggler . click ( )
249+ } )
118250 } )
119251
120252 describe ( 'class' , ( ) => {
121- it ( 'should add the `toggle` class to c-app element' , done => {
253+ it ( 'should add the `toggle` class to `. c-app` element' , done => {
122254 fixtureEl . innerHTML = [
123255 '<div class="c-app">' ,
124- ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle ="toggle"></div>' ,
256+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-class ="toggle"></div>' ,
125257 '</div>'
126258 ] . join ( '' )
127259
128260 const c = document . querySelector ( '.c-app' )
129261 const toggler = document . querySelector ( '.c-class-toggler' )
130262
131- c . addEventListener ( 'classattached ' , ( ) => {
263+ c . addEventListener ( 'classtoggle ' , ( ) => {
132264 expect ( c . classList . contains ( 'toggle' ) ) . toEqual ( true )
133265 done ( )
134266 } )
135267
136268 toggler . click ( )
137269 } )
138270
139- it ( 'should remove the `toggle` class from c-app element' , done => {
271+ it ( 'should remove the `toggle` class from `. c-app` element' , done => {
140272 fixtureEl . innerHTML = [
141273 '<div class="c-app toggle">' ,
142- ' <button type="button" class="c-class-toggler" data-target=".c-app" data-toggle ="toggle"></div>' ,
274+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-class ="toggle"></div>' ,
143275 '</div>'
144276 ] . join ( '' )
145277
146278 const c = document . querySelector ( '.c-app' )
147279 const toggler = document . querySelector ( '.c-class-toggler' )
148280
149- c . addEventListener ( 'classdetached ' , ( ) => {
281+ c . addEventListener ( 'classremoved ' , ( ) => {
150282 expect ( c . classList . contains ( 'toggle' ) ) . toEqual ( false )
151283 done ( )
152284 } )
153285
154286 toggler . click ( )
155287 } )
288+
289+ it ( 'should remove the `test-show` class from the `.c-app` element' , done => {
290+ fixtureEl . innerHTML = [
291+ '<div class="c-app test-show">' ,
292+ ' <button type="button" class="c-class-toggler" data-target=".c-app" data-class="test-xl-show" data-responsive="true"></div>' ,
293+ '</div>'
294+ ] . join ( '' )
295+
296+ const c = document . querySelector ( '.c-app' )
297+ const toggler = document . querySelector ( '.c-class-toggler' )
298+
299+ c . addEventListener ( 'classremoved' , ( ) => {
300+ expect ( c . classList . contains ( 'test-show' ) ) . toEqual ( false )
301+ done ( )
302+ } )
303+
304+ toggler . click ( )
305+ } )
156306 } )
157307} )
0 commit comments