@@ -238,5 +238,101 @@ define(function (require, exports, module) {
238238 expect ( executed ) . toContain ( Commands . NAVIGATE_SHOW_IN_FILE_TREE ) ;
239239 } ) ;
240240 } ) ;
241+
242+ describe ( "3. Toggle Design Mode command" , function ( ) {
243+ let WorkspaceManager ;
244+
245+ beforeAll ( function ( ) {
246+ WorkspaceManager = brackets . test . WorkspaceManager ;
247+ } ) ;
248+
249+ async function _enterDesignMode ( ) {
250+ CommandManager . execute ( Commands . VIEW_TOGGLE_DESIGN_MODE ) ;
251+ await awaitsFor ( function ( ) { return WorkspaceManager . isInDesignMode ( ) ; } ,
252+ "design mode to activate" , 10000 ) ;
253+ }
254+
255+ async function _exitDesignMode ( ) {
256+ if ( ! WorkspaceManager . isInDesignMode ( ) ) {
257+ return ;
258+ }
259+ CommandManager . execute ( Commands . VIEW_TOGGLE_DESIGN_MODE ) ;
260+ await awaitsFor ( function ( ) { return ! WorkspaceManager . isInDesignMode ( ) ; } ,
261+ "design mode to deactivate" , 10000 ) ;
262+ }
263+
264+ afterEach ( async function ( ) {
265+ await _exitDesignMode ( ) ;
266+ // The toggle opens Live Preview if it wasn't already open; close it so later
267+ // tests start from a clean baseline.
268+ const lp = WorkspaceManager . getPanelForID && WorkspaceManager . getPanelForID ( "live-preview-panel" ) ;
269+ if ( lp && lp . isVisible ( ) ) {
270+ CommandManager . execute ( Commands . FILE_LIVE_FILE_PREVIEW ) ;
271+ await awaitsFor ( function ( ) { return ! lp . isVisible ( ) ; } ,
272+ "live preview to close" , 5000 ) ;
273+ }
274+ } ) ;
275+
276+ it ( "should execute VIEW_TOGGLE_DESIGN_MODE and flip isInDesignMode() from false to true and back" , async function ( ) {
277+ expect ( WorkspaceManager . isInDesignMode ( ) ) . toBe ( false ) ;
278+
279+ await _enterDesignMode ( ) ;
280+ expect ( WorkspaceManager . isInDesignMode ( ) ) . toBe ( true ) ;
281+
282+ await _exitDesignMode ( ) ;
283+ expect ( WorkspaceManager . isInDesignMode ( ) ) . toBe ( false ) ;
284+ } ) ;
285+
286+ it ( "should mirror Command.getChecked() against WorkspaceManager.isInDesignMode() on entry and exit" , async function ( ) {
287+ const cmd = CommandManager . get ( Commands . VIEW_TOGGLE_DESIGN_MODE ) ;
288+ expect ( cmd ) . toBeDefined ( ) ;
289+
290+ expect ( ! ! cmd . getChecked ( ) ) . toBe ( false ) ;
291+ expect ( WorkspaceManager . isInDesignMode ( ) ) . toBe ( false ) ;
292+
293+ await _enterDesignMode ( ) ;
294+ expect ( ! ! cmd . getChecked ( ) ) . toBe ( true ) ;
295+ expect ( WorkspaceManager . isInDesignMode ( ) ) . toBe ( true ) ;
296+
297+ await _exitDesignMode ( ) ;
298+ expect ( ! ! cmd . getChecked ( ) ) . toBe ( false ) ;
299+ expect ( WorkspaceManager . isInDesignMode ( ) ) . toBe ( false ) ;
300+ } ) ;
301+
302+ it ( "should toggle design mode when #ccbCollapseEditorBtn is clicked" , async function ( ) {
303+ expect ( WorkspaceManager . isInDesignMode ( ) ) . toBe ( false ) ;
304+
305+ _$ ( "#ccbCollapseEditorBtn" ) . trigger ( "click" ) ;
306+ await awaitsFor ( function ( ) { return WorkspaceManager . isInDesignMode ( ) ; } ,
307+ "design mode to activate from click" , 10000 ) ;
308+
309+ _$ ( "#ccbCollapseEditorBtn" ) . trigger ( "click" ) ;
310+ await awaitsFor ( function ( ) { return ! WorkspaceManager . isInDesignMode ( ) ; } ,
311+ "design mode to deactivate from click" , 10000 ) ;
312+ } ) ;
313+
314+ it ( "should swap icon (pen-nib svg ↔ fa-code) and title on state change" , async function ( ) {
315+ const $btn = _$ ( "#ccbCollapseEditorBtn" ) ;
316+
317+ // Expanded (not in design mode): svg pen-nib + "Switch to Design Mode".
318+ expect ( $btn . find ( "svg" ) . length ) . toBe ( 1 ) ;
319+ expect ( $btn . find ( "i.fa-code" ) . length ) . toBe ( 0 ) ;
320+ expect ( $btn . attr ( "title" ) ) . toBe ( Strings . CCB_SWITCH_TO_DESIGN_MODE ) ;
321+
322+ await _enterDesignMode ( ) ;
323+
324+ // Design mode: <i class="fa-solid fa-code"> + "Switch to Code Editor".
325+ expect ( $btn . find ( "i.fa-code" ) . length ) . toBe ( 1 ) ;
326+ expect ( $btn . find ( "svg" ) . length ) . toBe ( 0 ) ;
327+ expect ( $btn . attr ( "title" ) ) . toBe ( Strings . CCB_SWITCH_TO_CODE_EDITOR ) ;
328+
329+ await _exitDesignMode ( ) ;
330+
331+ // Back to expanded — svg restored, title restored.
332+ expect ( $btn . find ( "svg" ) . length ) . toBe ( 1 ) ;
333+ expect ( $btn . find ( "i.fa-code" ) . length ) . toBe ( 0 ) ;
334+ expect ( $btn . attr ( "title" ) ) . toBe ( Strings . CCB_SWITCH_TO_DESIGN_MODE ) ;
335+ } ) ;
336+ } ) ;
241337 } ) ;
242338} ) ;
0 commit comments