Skip to content

Commit 2c26e30

Browse files
committed
Merge branch 'esskar-master'
2 parents 24815a9 + 6d3788c commit 2c26e30

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

src/Spark.Tests/Parser/ViewLoaderTester.cs

+26
Original file line numberDiff line numberDiff line change
@@ -311,5 +311,31 @@ public void PartialsInCascadingBaseFoldersAndSharedFoldersAreDiscovered()
311311
Assert.That(partials, Has.None.EqualTo("dontfind2"));
312312
Assert.That(partials, Has.None.EqualTo("dontfind3"));
313313
}
314+
315+
[Test]
316+
public void LoadingEmptyFile()
317+
{
318+
var viewFolder = new InMemoryViewFolder
319+
{
320+
{Path.Combine("home", "empty.spark"), ""},
321+
};
322+
var viewLoader = new ViewLoader { SyntaxProvider = new DefaultSyntaxProvider(ParserSettings.DefaultBehavior), ViewFolder = viewFolder };
323+
var chunks = viewLoader.Load(Path.Combine("home", "empty.spark"));
324+
var everything = viewLoader.GetEverythingLoaded();
325+
Assert.AreEqual(1, everything.Count());
326+
}
327+
328+
[Test]
329+
public void LoadingEmptyShadeFile()
330+
{
331+
var viewFolder = new InMemoryViewFolder
332+
{
333+
{Path.Combine("home", "empty.shade"), ""},
334+
};
335+
var viewLoader = new ViewLoader { SyntaxProvider = new DefaultSyntaxProvider(ParserSettings.DefaultBehavior), ViewFolder = viewFolder };
336+
var chunks = viewLoader.Load(Path.Combine("home", "empty.shade"));
337+
var everything = viewLoader.GetEverythingLoaded();
338+
Assert.AreEqual(1, everything.Count());
339+
}
314340
}
315341
}

src/Spark/Parser/Grammar.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public static ParseAction<IList<TValue>> Rep<TValue>(ParseAction<TValue> parse)
184184

185185
var rest = input;
186186
var result = parse(rest);
187-
while (result != null)
187+
while (result != null && !rest.IsSamePosition(result.Rest))
188188
{
189189
list.Add(result.Value);
190190
rest = result.Rest;

src/Spark/Parser/Position.cs

+12
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,18 @@ public Position(SourceContext sourceContext, int sourceContextLength, int offset
8585
this.paintLink = paintLink;
8686
}
8787

88+
public bool IsSamePosition(Position position)
89+
{
90+
if (position == null)
91+
throw new ArgumentNullException("position");
92+
93+
if (object.ReferenceEquals(position, this)) //obviously
94+
return true;
95+
return position.Column == this.Column
96+
&& position.Line == this.Line
97+
&& position.Offset == this.Offset;
98+
}
99+
88100
public SourceContext SourceContext
89101
{
90102
get

0 commit comments

Comments
 (0)