Skip to content

Commit 8bb19f1

Browse files
authored
Merge pull request #69 from danipen/fix-68
Emit a ModelTokensChangedEvent for all the lines when setting a null grammar
2 parents 5f8da79 + e3830cd commit 8bb19f1

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

src/TextMateSharp.Tests/Model/TMModelTests.cs

+42
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,48 @@ public void TMModel_Should_Not_Parse_Setting_A_Null_Grammar()
6666
It.IsAny<ModelTokensChangedEvent>()), Times.Never());
6767
}
6868

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+
69111
class ModelLinesMock : AbstractLineList
70112
{
71113
string[] _lines;

src/TextMateSharp/Model/Range.cs

+6
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,11 @@ public Range(int lineNumber)
1010
FromLineNumber = lineNumber;
1111
ToLineNumber = lineNumber;
1212
}
13+
14+
public Range(int fromLineNumber, int toLineNumber)
15+
{
16+
FromLineNumber = fromLineNumber;
17+
ToLineNumber = toLineNumber;
18+
}
1319
}
1420
}

src/TextMateSharp/Model/TMModel.cs

+4
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,10 @@ public void SetGrammar(IGrammar grammar)
291291
Start();
292292
InvalidateLine(0);
293293
}
294+
else
295+
{
296+
Emit(new ModelTokensChangedEvent(new Range(0, _lines.GetNumberOfLines() - 1), this));
297+
}
294298
}
295299
}
296300

0 commit comments

Comments
 (0)