@@ -27,7 +27,6 @@ import domEvents from 'dom-events';
27
27
import td from 'testdouble' ;
28
28
29
29
import { MDCDrawer } from '../../../packages/mdc-drawer' ;
30
- import * as util from '../../../packages/mdc-drawer/util' ;
31
30
import { strings , cssClasses } from '../../../packages/mdc-drawer/constants' ;
32
31
import { MDCListFoundation } from '../../../packages/mdc-list' ;
33
32
import MDCDismissibleDrawerFoundation from '../../../packages/mdc-drawer/dismissible/foundation' ;
@@ -59,13 +58,21 @@ function setupTest(variantClass = cssClasses.DISMISSIBLE) {
59
58
const root = getFixture ( variantClass ) ;
60
59
const drawer = root . querySelector ( '.mdc-drawer' ) ;
61
60
const component = new MDCDrawer ( drawer ) ;
62
- const MockFoundationCtor = td . constructor ( MDCDismissibleDrawerFoundation ) ;
63
- const mockFoundation = new MockFoundationCtor ( ) ;
64
- return { root, drawer, component, mockFoundation} ;
61
+ return { root, drawer, component} ;
65
62
}
66
63
67
- function hasClassMatcher ( className ) {
68
- return td . matchers . argThat ( ( el ) => el . classList && el . classList . contains ( className ) ) ;
64
+
65
+ function setupTestWithMocks ( variantClass = cssClasses . DISMISSIBLE ) {
66
+ const root = getFixture ( variantClass ) ;
67
+ const drawer = root . querySelector ( '.mdc-drawer' ) ;
68
+ const MockFoundationCtor = td . constructor ( MDCDismissibleDrawerFoundation ) ;
69
+ const mockFoundation = new MockFoundationCtor ( ) ;
70
+ const mockFocusTrapInstance = td . object ( {
71
+ activate : ( ) => { } ,
72
+ deactivate : ( ) => { } ,
73
+ } ) ;
74
+ const component = new MDCDrawer ( drawer , mockFoundation , ( ) => mockFocusTrapInstance ) ;
75
+ return { root, drawer, component, mockFoundation, mockFocusTrapInstance} ;
69
76
}
70
77
71
78
suite ( 'MDCDrawer' ) ;
@@ -76,39 +83,34 @@ test('attachTo initializes and returns a MDCDrawer instance', () => {
76
83
} ) ;
77
84
78
85
test ( '#get open calls foundation.isOpen' , ( ) => {
79
- const { component} = setupTest ( ) ;
80
- component . foundation_ . isOpen = td . func ( ) ;
86
+ const { component, mockFoundation} = setupTestWithMocks ( ) ;
81
87
component . open ;
82
- td . verify ( component . foundation_ . isOpen ( ) , { times : 1 } ) ;
88
+ td . verify ( mockFoundation . isOpen ( ) , { times : 1 } ) ;
83
89
} ) ;
84
90
85
91
test ( '#set open true calls foundation.open' , ( ) => {
86
- const { component} = setupTest ( ) ;
87
- component . foundation_ . open = td . func ( ) ;
92
+ const { component, mockFoundation} = setupTestWithMocks ( ) ;
88
93
component . open = true ;
89
- td . verify ( component . foundation_ . open ( ) , { times : 1 } ) ;
94
+ td . verify ( mockFoundation . open ( ) , { times : 1 } ) ;
90
95
} ) ;
91
96
92
97
test ( '#set open false calls foundation.close' , ( ) => {
93
- const { component} = setupTest ( ) ;
94
- component . foundation_ . close = td . func ( ) ;
98
+ const { component, mockFoundation} = setupTestWithMocks ( ) ;
95
99
component . open = false ;
96
- td . verify ( component . foundation_ . close ( ) , { times : 1 } ) ;
100
+ td . verify ( mockFoundation . close ( ) , { times : 1 } ) ;
97
101
} ) ;
98
102
99
103
test ( 'keydown event calls foundation.handleKeydown method' , ( ) => {
100
- const { component, drawer} = setupTest ( ) ;
101
- component . foundation_ . handleKeydown = td . func ( ) ;
104
+ const { drawer, mockFoundation} = setupTestWithMocks ( ) ;
102
105
drawer . querySelector ( '.mdc-list-item' ) . focus ( ) ;
103
106
domEvents . emit ( drawer , 'keydown' ) ;
104
- td . verify ( component . foundation_ . handleKeydown ( td . matchers . isA ( Object ) ) , { times : 1 } ) ;
107
+ td . verify ( mockFoundation . handleKeydown ( td . matchers . isA ( Object ) ) , { times : 1 } ) ;
105
108
} ) ;
106
109
107
110
test ( 'transitionend event calls foundation.handleTransitionEnd method' , ( ) => {
108
- const { component, drawer} = setupTest ( ) ;
109
- component . foundation_ . handleTransitionEnd = td . func ( ) ;
111
+ const { drawer, mockFoundation} = setupTestWithMocks ( ) ;
110
112
domEvents . emit ( drawer , 'transitionend' ) ;
111
- td . verify ( component . foundation_ . handleTransitionEnd ( td . matchers . isA ( Object ) ) , { times : 1 } ) ;
113
+ td . verify ( mockFoundation . handleTransitionEnd ( td . matchers . isA ( Object ) ) , { times : 1 } ) ;
112
114
} ) ;
113
115
114
116
test ( 'component should throw error when invalid variant class name is used or no variant specified' , ( ) => {
@@ -117,15 +119,15 @@ test('component should throw error when invalid variant class name is used or no
117
119
} ) ;
118
120
119
121
test ( '#destroy removes keydown event listener' , ( ) => {
120
- const { component, drawer, mockFoundation} = setupTest ( ) ;
122
+ const { component, drawer, mockFoundation} = setupTestWithMocks ( ) ;
121
123
component . destroy ( ) ;
122
124
drawer . querySelector ( '.mdc-list-item' ) . focus ( ) ;
123
125
domEvents . emit ( drawer , 'keydown' ) ;
124
126
td . verify ( mockFoundation . handleKeydown ( td . matchers . isA ( Object ) ) , { times : 0 } ) ;
125
127
} ) ;
126
128
127
129
test ( '#destroy removes transitionend event listener' , ( ) => {
128
- const { component, drawer, mockFoundation} = setupTest ( ) ;
130
+ const { component, drawer, mockFoundation} = setupTestWithMocks ( ) ;
129
131
component . destroy ( ) ;
130
132
131
133
domEvents . emit ( drawer , 'transitionend' ) ;
@@ -218,41 +220,17 @@ test('adapter#restoreFocus focus is not restored if saveFocus never called', ()
218
220
} ) ;
219
221
220
222
test ( 'adapter#trapFocus traps focus on root element' , ( ) => {
221
- const { createFocusTrapInstance} = util ;
222
- util . createFocusTrapInstance = td . func ( 'util.createFocusTrapInstance' ) ;
223
-
224
- const fakeFocusTrapInstance = td . object ( {
225
- activate : ( ) => { } ,
226
- deactivate : ( ) => { } ,
227
- } ) ;
228
- td . when (
229
- util . createFocusTrapInstance ( hasClassMatcher ( 'mdc-drawer' ) )
230
- ) . thenReturn ( fakeFocusTrapInstance ) ;
231
-
232
- const { component} = setupTest ( cssClasses . MODAL ) ;
223
+ const { component, mockFocusTrapInstance} = setupTestWithMocks ( cssClasses . MODAL ) ;
233
224
component . getDefaultFoundation ( ) . adapter_ . trapFocus ( ) ;
234
- util . createFocusTrapInstance = createFocusTrapInstance ;
235
225
236
- td . verify ( fakeFocusTrapInstance . activate ( ) ) ;
226
+ td . verify ( mockFocusTrapInstance . activate ( ) ) ;
237
227
} ) ;
238
228
239
229
test ( 'adapter#releaseFocus releases focus on root element after trap focus' , ( ) => {
240
- const { createFocusTrapInstance} = util ;
241
- util . createFocusTrapInstance = td . func ( 'util.createFocusTrapInstance' ) ;
242
-
243
- const fakeFocusTrapInstance = td . object ( {
244
- activate : ( ) => { } ,
245
- deactivate : ( ) => { } ,
246
- } ) ;
247
- td . when (
248
- util . createFocusTrapInstance ( hasClassMatcher ( 'mdc-drawer' ) )
249
- ) . thenReturn ( fakeFocusTrapInstance ) ;
250
-
251
- const { component} = setupTest ( cssClasses . MODAL ) ;
230
+ const { component, mockFocusTrapInstance} = setupTestWithMocks ( cssClasses . MODAL ) ;
252
231
component . getDefaultFoundation ( ) . adapter_ . releaseFocus ( ) ;
253
- util . createFocusTrapInstance = createFocusTrapInstance ;
254
232
255
- td . verify ( fakeFocusTrapInstance . deactivate ( ) ) ;
233
+ td . verify ( mockFocusTrapInstance . deactivate ( ) ) ;
256
234
} ) ;
257
235
258
236
test ( 'adapter#computeBoundingRect calls getBoundingClientRect() on root' , ( ) => {
0 commit comments