feat: initial support for fragment parsing, ref: NOISSUE

This commit is contained in:
Simon Diesenreiter
2024-12-03 18:07:55 +01:00
parent 5f07f16f1f
commit 29f7aa37da
18 changed files with 489 additions and 34 deletions

View File

@@ -26,7 +26,7 @@ public class TextParserTests
.EndRepetition()
.Build();
var parser = new LineParser(schema);
var parser = new LineParser<InputSchemaContext>(schema);
var tokens = parser.ParseLine(testInput1);
Assert.Equal(4, tokens.Count);
@@ -51,7 +51,7 @@ public class TextParserTests
.Expect(InputType.Integer)
.Build();
var parser = new LineParser(schema);
var parser = new LineParser<InputSchemaContext>(schema);
var tokens = parser.ParseLine(testInput1);
Assert.Equal(4, tokens.Count);
@@ -79,7 +79,7 @@ public class TextParserTests
.EndRepetition()
.Build();
var parser = new LineParser(schema);
var parser = new LineParser<InputSchemaContext>(schema);
var tokens = parser.ParseLine(testInput2);
Assert.Equal(6, tokens.Count);
@@ -107,7 +107,7 @@ public class TextParserTests
.EndRepetition()
.Build();
var parser = new TextParser(schema);
var parser = new TextParser<InputSchemaContext>(schema);
var rows = parser
.SetInputText(testInput3)
.Parse()
@@ -139,7 +139,7 @@ public class TextParserTests
.EndRepetition()
.Build();
var parser = new TextParser(schema);
var parser = new TextParser<InputSchemaContext>(schema);
var columns = parser
.SetInputText(testInput3)
.Parse()
@@ -174,7 +174,7 @@ public class TextParserTests
.EndRepetition()
.Build();
var parser = new TextParser(schema);
var parser = new TextParser<InputSchemaContext>(schema);
var rows = parser
.SetInputText(testInput4)
.Parse()
@@ -199,4 +199,55 @@ public class TextParserTests
Assert.Equal(InputType.String, rows[2][3].GetInputType());
Assert.Equal(InputType.String, rows[2][4].GetInputType());
}
[Fact]
public void FragmentParser_SimpleTest()
{
var schemaBuilder = new FragmentSchemaBuilder();
var schema = schemaBuilder
.StartOptions()
.Option()
.Expect("nums(")
.Expect(InputType.Integer)
.Repeat()
.Expect(",")
.Expect(InputType.Integer)
.EndRepetition()
.Expect(")")
.Option()
.Expect("strs(")
.Expect(InputType.String)
.Repeat()
.Expect(",")
.Expect(InputType.String)
.EndRepetition()
.Expect(")")
.EndOptions()
.Build();
var parser = new TextParser<FragmentSchemaContext>(schema);
var rows = parser
.SetInputText(testInput4)
.Parse()
.AsFragments();
Assert.Equal(3, rows.Count);
Assert.Equal(6, rows[0].Count);
Assert.Equal(3, rows[1].Count);
Assert.Equal(5, rows[2].Count);
// Assert.Equal(InputType.Integer, rows[0][0].GetInputType());
// Assert.Equal(InputType.String, rows[0][1].GetInputType());
// Assert.Equal(InputType.String, rows[0][2].GetInputType());
// Assert.Equal(InputType.String, rows[0][3].GetInputType());
// Assert.Equal(InputType.String, rows[0][4].GetInputType());
// Assert.Equal(InputType.String, rows[0][5].GetInputType());
// Assert.Equal(InputType.Integer, rows[1][0].GetInputType());
// Assert.Equal(InputType.String, rows[1][1].GetInputType());
// Assert.Equal(InputType.String, rows[1][2].GetInputType());
// Assert.Equal(InputType.Integer, rows[2][0].GetInputType());
// Assert.Equal(InputType.String, rows[2][1].GetInputType());
// Assert.Equal(InputType.Integer, rows[2][2].GetInputType());
// Assert.Equal(InputType.String, rows[2][3].GetInputType());
// Assert.Equal(InputType.String, rows[2][4].GetInputType());
}
}