1414 * limitations under the License.
1515 */
1616
17- import { EventEmitter } from 'vscode' ;
17+ import * as vscode from 'vscode' ;
1818import { TreeViewProvider } from './treeview-provider' ;
1919import { SolutionOutlineView } from './solution-outline' ;
2020import { SolutionLoadState } from '../../solutions/solution-manager' ;
@@ -26,15 +26,18 @@ import { globalStateFactory } from '../../vscode-api/global-state.factories';
2626import { COutlineItem } from './tree-structure/solution-outline-item' ;
2727import { csolutionFactory } from '../../solutions/csolution.factory' ;
2828import { TreeViewFileDecorationProvider } from './treeview-decoration-provider' ;
29+ import { configurationProviderFactory , MockConfigurationProvider } from '../../vscode-api/configuration-provider.factories' ;
30+ import { CONFIG_AUTO_REVEAL_SOLUTION_OUTLINE } from '../../manifest' ;
2931
3032describe ( 'SolutionOutlineView' , ( ) => {
3133 let mockTreeViewProvider : TreeViewProvider < COutlineItem > ;
3234 let mockTreeViewFileDecorationProvider : TreeViewFileDecorationProvider ;
33- let visibilityChangeEmitter : EventEmitter < Event > ;
35+ let visibilityChangeEmitter : vscode . EventEmitter < Event > ;
3436 let globalStateProvider : GlobalState < CsolutionGlobalState > ;
37+ let configurationProvider : MockConfigurationProvider ;
3538
3639 beforeEach ( async ( ) => {
37- visibilityChangeEmitter = new EventEmitter ( ) ;
40+ visibilityChangeEmitter = new vscode . EventEmitter ( ) ;
3841
3942 mockTreeViewProvider = {
4043 updateTree : jest . fn ( ) ,
@@ -50,6 +53,7 @@ describe('SolutionOutlineView', () => {
5053 } as unknown as TreeViewFileDecorationProvider ;
5154
5255 globalStateProvider = globalStateFactory ( ) ;
56+ configurationProvider = configurationProviderFactory ( ) ;
5357 } ) ;
5458
5559
@@ -58,7 +62,8 @@ describe('SolutionOutlineView', () => {
5862 solutionManagerFactory ( ) ,
5963 mockTreeViewProvider ,
6064 globalStateProvider ,
61- mockTreeViewFileDecorationProvider
65+ mockTreeViewFileDecorationProvider ,
66+ configurationProvider
6267 ) ;
6368 const context = extensionContextFactory ( ) ;
6469
@@ -73,7 +78,8 @@ describe('SolutionOutlineView', () => {
7378 solutionManagerFactory ( ) ,
7479 mockTreeViewProvider ,
7580 globalStateProvider ,
76- mockTreeViewFileDecorationProvider
81+ mockTreeViewFileDecorationProvider ,
82+ configurationProvider
7783 ) ;
7884 const context = extensionContextFactory ( ) ;
7985
@@ -95,7 +101,8 @@ describe('SolutionOutlineView', () => {
95101 mockSolutionManager ,
96102 mockTreeViewProvider ,
97103 globalStateProvider ,
98- mockTreeViewFileDecorationProvider
104+ mockTreeViewFileDecorationProvider ,
105+ configurationProvider
99106 ) ;
100107 await view . activate ( extensionContextFactory ( ) ) ;
101108
@@ -119,7 +126,8 @@ describe('SolutionOutlineView', () => {
119126 mockSolutionManager ,
120127 mockTreeViewProvider ,
121128 globalStateProvider ,
122- mockTreeViewFileDecorationProvider
129+ mockTreeViewFileDecorationProvider ,
130+ configurationProvider
123131 ) ;
124132 await view . activate ( extensionContextFactory ( ) ) ;
125133
@@ -143,7 +151,8 @@ describe('SolutionOutlineView', () => {
143151 mockSolutionManager ,
144152 mockTreeViewProvider ,
145153 globalStateProvider ,
146- mockTreeViewFileDecorationProvider
154+ mockTreeViewFileDecorationProvider ,
155+ configurationProvider
147156 ) ;
148157 await view . activate ( extensionContextFactory ( ) ) ;
149158
@@ -165,7 +174,8 @@ describe('SolutionOutlineView', () => {
165174 mockSolutionManager ,
166175 mockTreeViewProvider ,
167176 globalStateProvider ,
168- mockTreeViewFileDecorationProvider
177+ mockTreeViewFileDecorationProvider ,
178+ configurationProvider
169179 ) ;
170180 await view . activate ( extensionContextFactory ( ) ) ;
171181
@@ -188,7 +198,8 @@ describe('SolutionOutlineView', () => {
188198 mockSolutionManager ,
189199 mockTreeViewProvider ,
190200 globalStateProvider ,
191- mockTreeViewFileDecorationProvider
201+ mockTreeViewFileDecorationProvider ,
202+ configurationProvider
192203 ) ;
193204 await view . activate ( extensionContextFactory ( ) ) ;
194205
@@ -202,4 +213,61 @@ describe('SolutionOutlineView', () => {
202213 expect ( mockTreeViewProvider . updateTree ) . toHaveBeenCalled ( ) ;
203214 } ) ;
204215
216+ it ( 'reveals the solution outline when a new solution is loaded and auto reveal is enabled' , async ( ) => {
217+ const executeCommandSpy = jest . spyOn ( vscode . commands , 'executeCommand' ) . mockResolvedValue ( undefined ) ;
218+ const solutionLoadedState = activeSolutionLoadStateFactory ( ) ;
219+ const mockSolutionManager = solutionManagerFactory ( {
220+ loadState : solutionLoadedState ,
221+ getCsolution : jest . fn ( ) . mockReturnValue ( csolutionFactory ( ) ) ,
222+ } ) ;
223+ const view = new SolutionOutlineView (
224+ mockSolutionManager ,
225+ mockTreeViewProvider ,
226+ globalStateProvider ,
227+ mockTreeViewFileDecorationProvider ,
228+ configurationProvider
229+ ) ;
230+
231+ await view . activate ( extensionContextFactory ( ) ) ;
232+ mockSolutionManager . onDidChangeLoadStateEmitter . fire ( {
233+ previousState : { solutionPath : undefined } ,
234+ newState : solutionLoadedState ,
235+ } ) ;
236+ await waitForPromises ( ) ;
237+
238+ expect ( executeCommandSpy ) . toHaveBeenCalledWith ( `${ SolutionOutlineView . treeViewId } .open` , { preserveFocus : true } ) ;
239+
240+ executeCommandSpy . mockRestore ( ) ;
241+ } ) ;
242+
243+ it ( 'does not reveal the solution outline when auto reveal is disabled' , async ( ) => {
244+ const executeCommandSpy = jest . spyOn ( vscode . commands , 'executeCommand' ) . mockResolvedValue ( undefined ) ;
245+ const solutionLoadedState = activeSolutionLoadStateFactory ( ) ;
246+ const mockSolutionManager = solutionManagerFactory ( {
247+ loadState : solutionLoadedState ,
248+ getCsolution : jest . fn ( ) . mockReturnValue ( csolutionFactory ( ) ) ,
249+ } ) ;
250+ configurationProvider = configurationProviderFactory ( {
251+ [ CONFIG_AUTO_REVEAL_SOLUTION_OUTLINE ] : false ,
252+ } ) ;
253+ const view = new SolutionOutlineView (
254+ mockSolutionManager ,
255+ mockTreeViewProvider ,
256+ globalStateProvider ,
257+ mockTreeViewFileDecorationProvider ,
258+ configurationProvider
259+ ) ;
260+
261+ await view . activate ( extensionContextFactory ( ) ) ;
262+ mockSolutionManager . onDidChangeLoadStateEmitter . fire ( {
263+ previousState : { solutionPath : undefined } ,
264+ newState : solutionLoadedState ,
265+ } ) ;
266+ await waitForPromises ( ) ;
267+
268+ expect ( executeCommandSpy ) . not . toHaveBeenCalledWith ( `${ SolutionOutlineView . treeViewId } .open` , { preserveFocus : true } ) ;
269+
270+ executeCommandSpy . mockRestore ( ) ;
271+ } ) ;
272+
205273} ) ;
0 commit comments