@@ -89,6 +89,58 @@ public void TargetsAttributesCode()
8989 Assert . AreEqual ( CodeKind . AttributesCode , rewriteSession . TargetCodeKind ) ;
9090 }
9191
92+ [ Test ]
93+ [ Category ( "Rewriter" ) ]
94+ public void CallsRecoverOpenStateOnRewrite ( )
95+ {
96+ var selectionRecovererMock = new Mock < ISelectionRecoverer > ( ) ;
97+ selectionRecovererMock . Setup ( m => m . RecoverOpenState ( ) ) ;
98+
99+ var rewriteSession = RewriteSession ( session => true , out var mockRewriterProvider , selectionRecoverer : selectionRecovererMock . Object ) ;
100+ var module = new QualifiedModuleName ( "TestProject" , string . Empty , "TestModule" ) ;
101+
102+ rewriteSession . CheckOutModuleRewriter ( module ) ;
103+ rewriteSession . TryRewrite ( ) ;
104+
105+ selectionRecovererMock . Verify ( m => m . RecoverOpenState ( ) , Times . Once ) ;
106+ }
107+
108+ [ Test ]
109+ [ Category ( "Rewriter" ) ]
110+ public void SavesOpenStateForCheckedOutModulesOnRewrite ( )
111+ {
112+ var selectionRecovererMock = new Mock < ISelectionRecoverer > ( ) ;
113+ selectionRecovererMock . Setup ( m => m . SaveOpenState ( It . IsAny < IEnumerable < QualifiedModuleName > > ( ) ) ) ;
114+
115+ var rewriteSession = RewriteSession ( session => true , out var mockRewriterProvider , selectionRecoverer : selectionRecovererMock . Object ) ;
116+ var module = new QualifiedModuleName ( "TestProject" , string . Empty , "TestModule" ) ;
117+ var module2 = new QualifiedModuleName ( "TestProject" , string . Empty , "TestModule2" ) ;
118+
119+ rewriteSession . CheckOutModuleRewriter ( module ) ;
120+ rewriteSession . CheckOutModuleRewriter ( module2 ) ;
121+ rewriteSession . TryRewrite ( ) ;
122+
123+ selectionRecovererMock . Verify ( m => m . SaveOpenState ( It . Is < IEnumerable < QualifiedModuleName > > ( modules => modules . Count ( ) == 2 && modules . Contains ( module ) && modules . Contains ( module2 ) ) ) ) ;
124+ }
125+
126+ [ Test ]
127+ [ Category ( "Rewriter" ) ]
128+ public void SavesOpenStateBeforeRestoringItOnRewrite ( )
129+ {
130+ var selectionRecovererMock = new Mock < ISelectionRecoverer > ( ) ;
131+ var lastOperation = string . Empty ;
132+ selectionRecovererMock . Setup ( m => m . SaveOpenState ( It . IsAny < IEnumerable < QualifiedModuleName > > ( ) ) ) . Callback ( ( ) => lastOperation = "SaveOpenState" ) ;
133+ selectionRecovererMock . Setup ( m => m . RecoverOpenState ( ) ) . Callback ( ( ) => lastOperation = "RecoverOpenState" ) ;
134+
135+ var rewriteSession = RewriteSession ( session => true , out var mockRewriterProvider , selectionRecoverer : selectionRecovererMock . Object ) ;
136+ var module = new QualifiedModuleName ( "TestProject" , string . Empty , "TestModule" ) ;
137+
138+ rewriteSession . CheckOutModuleRewriter ( module ) ;
139+ rewriteSession . TryRewrite ( ) ;
140+
141+ Assert . AreEqual ( "RecoverOpenState" , lastOperation ) ;
142+ }
143+
92144 protected override IRewriteSession RewriteSession ( IParseManager parseManager , Func < IRewriteSession , bool > rewritingAllowed , out MockRewriterProvider mockProvider , bool rewritersAreDirty = false , ISelectionRecoverer selectionRecoverer = null )
93145 {
94146 if ( selectionRecoverer == null )
0 commit comments