@@ -66,6 +66,48 @@ public void TMModel_Should_Not_Parse_Setting_A_Null_Grammar()
66
66
It . IsAny < ModelTokensChangedEvent > ( ) ) , Times . Never ( ) ) ;
67
67
}
68
68
69
+ [ Test ]
70
+ public void TMModel_Should_Emit_ModelTokensChangedEvent_To_Clean_Highlighted_Lines_When_Setting_A_Null_Grammar_After_Having_Another_Grammar ( )
71
+ {
72
+ ModelLinesMock modelLines = new ModelLinesMock ( new string [ ] { "line 1" , "line 2" , "line 3" } ) ;
73
+
74
+ TMModel tmModel = new TMModel ( modelLines ) ;
75
+
76
+ Mock < IModelTokensChangedListener > changesListenerMock = new Mock < IModelTokensChangedListener > (
77
+ MockBehavior . Strict ) ;
78
+ changesListenerMock . Setup (
79
+ c => c . ModelTokensChanged ( It . IsAny < ModelTokensChangedEvent > ( ) ) ) ;
80
+
81
+ RegistryOptions options = new RegistryOptions ( ThemeName . DarkPlus ) ;
82
+ Registry . Registry registry = new Registry . Registry ( options ) ;
83
+ IGrammar grammar = registry . LoadGrammar ( "source.cs" ) ;
84
+
85
+ tmModel . SetGrammar ( grammar ) ;
86
+
87
+ tmModel . AddModelTokensChangedListener ( changesListenerMock . Object ) ;
88
+ tmModel . SetGrammar ( null ) ;
89
+
90
+ // verify the three lines were invalidated
91
+ changesListenerMock . Verify ( c => c . ModelTokensChanged (
92
+ It . Is < ModelTokensChangedEvent > ( e => IsRangeValid ( e , 0 , 2 ) ) ) ,
93
+ Times . Once ( ) ) ;
94
+
95
+ }
96
+
97
+ static bool IsRangeValid ( ModelTokensChangedEvent e , int fromLine , int toLine )
98
+ {
99
+ if ( e . Ranges . Count != 1 )
100
+ return false ;
101
+
102
+ if ( e . Ranges [ 0 ] . FromLineNumber != fromLine )
103
+ return false ;
104
+
105
+ if ( e . Ranges [ 0 ] . ToLineNumber != toLine )
106
+ return false ;
107
+
108
+ return true ;
109
+ }
110
+
69
111
class ModelLinesMock : AbstractLineList
70
112
{
71
113
string [ ] _lines ;
0 commit comments