Skip to content

Commit ab8af36

Browse files
committed
Add UT for #1.
1 parent 1af3296 commit ab8af36

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

Luaon.NET/LuaTableTextReader.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ public class LuaTableTextReader : IDisposable
4040
private readonly List<LuaContainerContext> contextStack;
4141
private LuaContainerContext currentContext;
4242
private readonly char[] buffer;
43-
private int bufferLength;
44-
private int bufferPos;
43+
private int bufferLength; // Loaded buffer end position
44+
private int bufferPos; // Start of next buffer character
4545
private bool readerEof;
4646

4747
private static readonly object boxedTrue = true;
@@ -98,6 +98,7 @@ private enum Token
9898
private void GotoNextState(Token token)
9999
{
100100
var next = NextStateTable[(int)currentState][(int)token];
101+
Debug.WriteLine("GotoNextState: {0}[{1}] -> {2}", currentState, token, next);
101102
if (next == State.Error)
102103
{
103104
if (currentState == State.End)
@@ -230,6 +231,7 @@ private bool EnsureBuffer(int length = 0)
230231
bufferLength = bufferLength - bufferPos;
231232
bufferPos = 0;
232233
}
234+
// Read from where the current loaded buffer ends.
233235
var charsRead = Reader.ReadBlock(buffer, bufferLength, charsNeeded);
234236
bufferLength += charsRead;
235237
if (charsRead < charsNeeded)
@@ -438,6 +440,7 @@ public LuaTableReaderToken Read()
438440
if ((o = ReadLiteral()) != null)
439441
{
440442
GotoNextState(Token.Literal);
443+
Debug.WriteLine("Literal: {0}", o);
441444
if (currentState == State.Key)
442445
{
443446
currentContext.BoxedKey = o;
@@ -456,6 +459,7 @@ public LuaTableReaderToken Read()
456459
GotoNextState(Token.KeyStart);
457460
GotoNextState(Token.Literal);
458461
GotoNextState(Token.KeyEnd);
462+
Debug.WriteLine("Identifier: {0}", o);
459463
CurrentValue = o;
460464
// We keep using BoxedKey instead of Key in Reader.
461465
currentContext.BoxedKey = (string)o;

XUnitTestProject1/Tests/RegressionTests.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,25 @@ public class RegressionTests
1414
/// <summary>
1515
/// UnexpectedCharacterException when parsing long Lua table (> LuaTableTextReader buffer size, i.e., 1024).
1616
/// </summary>
17-
[Fact]
18-
public void Issue1()
17+
[Theory]
18+
[InlineData("0123456789ABCDEF", 3)]
19+
[InlineData("0123456789ABCDEF", 10)]
20+
[InlineData("0123456789ABCDEF", 64)]
21+
[InlineData("0123456789ABCDEF", 100)]
22+
public void Issue1(string seed, int repeat)
1923
{
20-
var longString1 = string.Join("", Enumerable.Repeat("0123456789ABCDEF", 64)); // 16 x 64 = 1024
21-
var longString2 = longString1 + "||" + longString1;
2224
var bigTable = new LTable
2325
{
24-
["Field1"] = longString1,
25-
["Field2"] = 12345,
26-
["Field2"] = longString2,
26+
["Field1"] = 12345,
27+
["Field2"] = "Test",
2728
};
29+
for (var i = 0; i < repeat; i++)
30+
bigTable[i] = seed + i;
2831
var serialized = bigTable.ToString(Formatting.Prettified);
29-
Assert.Contains(longString1, serialized);
30-
Assert.Contains(longString2, serialized);
32+
Assert.Contains("12345", serialized);
33+
Assert.Contains("Test", serialized);
3134
var bigTable2 = LToken.Parse(serialized);
32-
Assert.Equal(bigTable, bigTable2);
35+
Assert.Equal(bigTable.ToString(), bigTable2.ToString());
3336
}
3437

3538
}

0 commit comments

Comments
 (0)