2
2
// Use of this source code is governed by a BSD-style license that can be
3
3
// found in the LICENSE file.
4
4
5
+ import * as Common from '../../core/common/common.js' ;
5
6
import * as Host from '../../core/host/host.js' ;
6
7
import type * as Platform from '../../core/platform/platform.js' ;
7
8
import * as ProjectSettings from '../project_settings/project_settings.js' ;
8
9
9
10
import * as Persistence from './persistence.js' ;
10
11
12
+ function createStubInstances (
13
+ availability : ProjectSettings . ProjectSettingsModel . ProjectSettingsAvailability ,
14
+ projectSettings : ProjectSettings . ProjectSettingsModel . ProjectSettings ,
15
+ ) {
16
+ const inspectorFrontendHost =
17
+ sinon . createStubInstance ( class extends Host . InspectorFrontendHost . InspectorFrontendHostStub {
18
+ override events = sinon . createStubInstance ( Common . ObjectWrapper . ObjectWrapper ) ;
19
+ } ) ;
20
+ inspectorFrontendHost . events = sinon . createStubInstance ( Common . ObjectWrapper . ObjectWrapper ) ;
21
+ const projectSettingsModel = sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
22
+ sinon . stub ( projectSettingsModel , 'availability' ) . value ( availability ) ;
23
+ sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( projectSettings ) ;
24
+ return { inspectorFrontendHost, projectSettingsModel} ;
25
+ }
26
+
11
27
describe ( 'Persistence' , ( ) => {
12
28
describe ( 'AutomaticFileSystemManager' , ( ) => {
13
29
describe ( 'AutomaticFileSystemManager' , ( ) => {
@@ -22,11 +38,7 @@ describe('Persistence', () => {
22
38
} ) ;
23
39
24
40
it ( 'initially doesn\'t report an automatic file system' , ( ) => {
25
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
26
- const projectSettingsModel =
27
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
28
- sinon . stub ( projectSettingsModel , 'availability' ) . value ( 'available' ) ;
29
- sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( { } ) ;
41
+ const { inspectorFrontendHost, projectSettingsModel} = createStubInstances ( 'available' , { } ) ;
30
42
31
43
const manager = AutomaticFileSystemManager . instance ( {
32
44
forceNew : true ,
@@ -40,9 +52,7 @@ describe('Persistence', () => {
40
52
41
53
it ( 'doesn\'t listen to project settings changes when `devToolsAutomaticFileSystems` is off' , ( ) => {
42
54
const hostConfig = { devToolsAutomaticFileSystems : { enabled : false } } ;
43
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
44
- const projectSettingsModel =
45
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
55
+ const { inspectorFrontendHost, projectSettingsModel} = createStubInstances ( 'available' , { } ) ;
46
56
47
57
AutomaticFileSystemManager . instance ( {
48
58
forceNew : true ,
@@ -54,12 +64,24 @@ describe('Persistence', () => {
54
64
sinon . assert . notCalled ( projectSettingsModel . addEventListener ) ;
55
65
} ) ;
56
66
67
+ it ( 'listens to FileSystemRemoved events' , ( ) => {
68
+ const { inspectorFrontendHost, projectSettingsModel} = createStubInstances ( 'available' , { } ) ;
69
+
70
+ const automaticFileSystemManager = AutomaticFileSystemManager . instance ( {
71
+ forceNew : true ,
72
+ hostConfig,
73
+ inspectorFrontendHost,
74
+ projectSettingsModel,
75
+ } ) ;
76
+
77
+ sinon . assert . calledOnceWithMatch (
78
+ inspectorFrontendHost . events . addEventListener , Host . InspectorFrontendHostAPI . Events . FileSystemRemoved ,
79
+ sinon . match . func , automaticFileSystemManager ) ;
80
+ } ) ;
81
+
57
82
it ( 'attempts to automatically connect the file system initially' , ( ) => {
58
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
59
- const projectSettingsModel =
60
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
61
- sinon . stub ( projectSettingsModel , 'availability' ) . value ( 'available' ) ;
62
- sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( { workspace : { root, uuid} } ) ;
83
+ const { inspectorFrontendHost, projectSettingsModel} =
84
+ createStubInstances ( 'available' , { workspace : { root, uuid} } ) ;
63
85
64
86
const manager = AutomaticFileSystemManager . instance ( {
65
87
forceNew : true ,
@@ -74,11 +96,8 @@ describe('Persistence', () => {
74
96
} ) ;
75
97
76
98
it ( 'reflects state correctly when automatic connection succeeds' , async ( ) => {
77
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
78
- const projectSettingsModel =
79
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
80
- sinon . stub ( projectSettingsModel , 'availability' ) . value ( 'available' ) ;
81
- sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( { workspace : { root, uuid} } ) ;
99
+ const { inspectorFrontendHost, projectSettingsModel} =
100
+ createStubInstances ( 'available' , { workspace : { root, uuid} } ) ;
82
101
83
102
const manager = AutomaticFileSystemManager . instance ( {
84
103
forceNew : true ,
@@ -95,11 +114,8 @@ describe('Persistence', () => {
95
114
} ) ;
96
115
97
116
it ( 'reflects state correctly when automatic connection fails' , async ( ) => {
98
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
99
- const projectSettingsModel =
100
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
101
- sinon . stub ( projectSettingsModel , 'availability' ) . value ( 'available' ) ;
102
- sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( { workspace : { root, uuid} } ) ;
117
+ const { inspectorFrontendHost, projectSettingsModel} =
118
+ createStubInstances ( 'available' , { workspace : { root, uuid} } ) ;
103
119
104
120
const manager = AutomaticFileSystemManager . instance ( {
105
121
forceNew : true ,
@@ -116,11 +132,8 @@ describe('Persistence', () => {
116
132
} ) ;
117
133
118
134
it ( 'performs first-time setup of automatic file system correctly' , async ( ) => {
119
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
120
- const projectSettingsModel =
121
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
122
- sinon . stub ( projectSettingsModel , 'availability' ) . value ( 'available' ) ;
123
- sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( { workspace : { root, uuid} } ) ;
135
+ const { inspectorFrontendHost, projectSettingsModel} =
136
+ createStubInstances ( 'available' , { workspace : { root, uuid} } ) ;
124
137
const manager = AutomaticFileSystemManager . instance ( {
125
138
forceNew : true ,
126
139
hostConfig,
@@ -147,11 +160,8 @@ describe('Persistence', () => {
147
160
} ) ;
148
161
149
162
it ( 'correctly disconnects automatic file systems' , async ( ) => {
150
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
151
- const projectSettingsModel =
152
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
153
- sinon . stub ( projectSettingsModel , 'availability' ) . value ( 'available' ) ;
154
- sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( { workspace : { root, uuid} } ) ;
163
+ const { inspectorFrontendHost, projectSettingsModel} =
164
+ createStubInstances ( 'available' , { workspace : { root, uuid} } ) ;
155
165
const manager = AutomaticFileSystemManager . instance ( {
156
166
forceNew : true ,
157
167
hostConfig,
@@ -171,11 +181,31 @@ describe('Persistence', () => {
171
181
assert . deepEqual ( manager . automaticFileSystem , { root, uuid, state : 'disconnected' } ) ;
172
182
} ) ;
173
183
184
+ it ( 'reflects disconnected state correctly when the file system is removed' , async ( ) => {
185
+ const { inspectorFrontendHost, projectSettingsModel} =
186
+ createStubInstances ( 'available' , { workspace : { root, uuid} } ) ;
187
+ const manager = AutomaticFileSystemManager . instance ( {
188
+ forceNew : true ,
189
+ hostConfig,
190
+ inspectorFrontendHost,
191
+ projectSettingsModel,
192
+ } ) ;
193
+ const [ , fileSystemRemoved ] = inspectorFrontendHost . events . addEventListener . lastCall . args ;
194
+ const [ , , , setupCallback ] = inspectorFrontendHost . connectAutomaticFileSystem . lastCall . args ;
195
+ setupCallback ( { success : true } ) ;
196
+ await manager . once ( AUTOMATIC_FILE_SYSTEM_CHANGED ) ;
197
+ const automaticFileSystemPromise = manager . once ( AUTOMATIC_FILE_SYSTEM_CHANGED ) ;
198
+
199
+ fileSystemRemoved . call ( manager , { data : root } ) ;
200
+
201
+ const automaticFileSystem = await automaticFileSystemPromise ;
202
+ assert . strictEqual ( manager . automaticFileSystem , automaticFileSystem ) ;
203
+ assert . deepEqual ( manager . automaticFileSystem , { root, uuid, state : 'disconnected' } ) ;
204
+ } ) ;
205
+
174
206
it ( 'reports unavailable when `devToolsAutomaticFileSystems` is off' , ( ) => {
175
207
const hostConfig = { devToolsAutomaticFileSystems : { enabled : false } } ;
176
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
177
- const projectSettingsModel =
178
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
208
+ const { inspectorFrontendHost, projectSettingsModel} = createStubInstances ( 'available' , { } ) ;
179
209
180
210
const manager = AutomaticFileSystemManager . instance ( {
181
211
forceNew : true ,
@@ -188,11 +218,7 @@ describe('Persistence', () => {
188
218
} ) ;
189
219
190
220
it ( 'reports available when project settings are available' , ( ) => {
191
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
192
- const projectSettingsModel =
193
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
194
- sinon . stub ( projectSettingsModel , 'availability' ) . value ( 'available' ) ;
195
- sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( { } ) ;
221
+ const { inspectorFrontendHost, projectSettingsModel} = createStubInstances ( 'available' , { } ) ;
196
222
197
223
const manager = AutomaticFileSystemManager . instance ( {
198
224
forceNew : true ,
@@ -205,11 +231,7 @@ describe('Persistence', () => {
205
231
} ) ;
206
232
207
233
it ( 'reports unavailable when project settings are unavailable' , ( ) => {
208
- const inspectorFrontendHost = sinon . createStubInstance ( Host . InspectorFrontendHost . InspectorFrontendHostStub ) ;
209
- const projectSettingsModel =
210
- sinon . createStubInstance ( ProjectSettings . ProjectSettingsModel . ProjectSettingsModel ) ;
211
- sinon . stub ( projectSettingsModel , 'availability' ) . value ( 'unavailable' ) ;
212
- sinon . stub ( projectSettingsModel , 'projectSettings' ) . value ( { } ) ;
234
+ const { inspectorFrontendHost, projectSettingsModel} = createStubInstances ( 'unavailable' , { } ) ;
213
235
214
236
const manager = AutomaticFileSystemManager . instance ( {
215
237
forceNew : true ,
0 commit comments