public void BufferToLarge() { var config = (ConcreteBoundConfiguration <_BufferToLarge>)Configuration.For <_BufferToLarge>(Options.Default.NewBuilder().WithMemoryPool(new TestMemoryPool <char>(16)).Build()); // none { using (var str = new StringReader("foo,fizz,bar,buzz,baz,nope,nada,zilch,what,who,when,where,qwerty,dvorak")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(MemoryPool <char> .Shared, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using (var reader = new HeadersReader <_BufferToLarge>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500))) { Assert.Throws <InvalidOperationException>(() => reader.Read()); } } } }
public void ManyHeaders() { var csv = string.Join( ",", new[] { nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader1), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader2), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader3), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader4), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader5), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader6), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader7), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader8), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader9), nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader10) } ); var config = (ConcreteBoundConfiguration <_ManyHeaders>)Configuration.For <_ManyHeaders>(Options.Default.NewBuilder().WithRowEnding(RowEndings.CarriageReturnLineFeed).Build()); using (var str = new StringReader(csv)) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_ManyHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader1), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader2), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader3), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader4), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader5), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader6), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader7), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader8), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader9), new string(i.Span)), i => Assert.Equal(nameof(_ManyHeaders.LoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongHeader10), new string(i.Span)) ); Assert.True(res.IsHeader); } }
public void JustHeaders() { var config = (ConcreteBoundConfiguration <_JustHeaders>)Configuration.For <_JustHeaders>(); // none { using (var str = new StringReader("fizz")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection(ToEnumerable(res.Headers), i => Assert.Equal("fizz", new string(i.Span))); Assert.False(res.IsHeader); } } // one, exact { using (var str = new StringReader("Foo")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection(ToEnumerable(res.Headers), i => Assert.Equal("Foo", new string(i.Span))); Assert.True(res.IsHeader); } } // one, inexact { using (var str = new StringReader("Foo,fizz")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Foo", new string(i.Span)), i => Assert.Equal("fizz", new string(i.Span)) ); Assert.True(res.IsHeader); } using (var str = new StringReader("fizz,Bar")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("fizz", new string(i.Span)), i => Assert.Equal("Bar", new string(i.Span)) ); Assert.True(res.IsHeader); } } // two, exact { using (var str = new StringReader("Foo,Bar")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Foo", new string(i.Span)), i => Assert.Equal("Bar", new string(i.Span)) ); Assert.True(res.IsHeader); } using (var str = new StringReader("Bar,Foo")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Bar", new string(i.Span)), i => Assert.Equal("Foo", new string(i.Span)) ); Assert.True(res.IsHeader); } } // two, inexact { using (var str = new StringReader("Foo,Bar,Fizz")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Foo", new string(i.Span)), i => Assert.Equal("Bar", new string(i.Span)), i => Assert.Equal("Fizz", new string(i.Span)) ); Assert.True(res.IsHeader); } using (var str = new StringReader("Bar,Fizz,Foo")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Bar", new string(i.Span)), i => Assert.Equal("Fizz", new string(i.Span)), i => Assert.Equal("Foo", new string(i.Span)) ); Assert.True(res.IsHeader); } } }
public void TrailingRecords() { var config = (ConcreteBoundConfiguration <_JustHeaders>)Configuration.For <_JustHeaders>(Options.Default.NewBuilder().WithRowEnding(RowEndings.CarriageReturnLineFeed).Build()); // none { using (var str = new StringReader("fizz\r\n0\r\n")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection(ToEnumerable(res.Headers), i => Assert.Equal("fizz", new string(i.Span))); Assert.False(res.IsHeader); } } // one, exact { using (var str = new StringReader("Foo\r\nfoo")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection(ToEnumerable(res.Headers), i => Assert.Equal("Foo", new string(i.Span))); Assert.True(res.IsHeader); } } // one, inexact { using (var str = new StringReader("Foo,fizz\r\n1,2")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Foo", new string(i.Span)), i => Assert.Equal("fizz", new string(i.Span)) ); Assert.True(res.IsHeader); } using (var str = new StringReader("fizz,Bar\r\n2,blah\r\n")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("fizz", new string(i.Span)), i => Assert.Equal("Bar", new string(i.Span)) ); Assert.True(res.IsHeader); } } // two, exact { using (var str = new StringReader("Foo,Bar\r\nwhatever,something")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Foo", new string(i.Span)), i => Assert.Equal("Bar", new string(i.Span)) ); Assert.True(res.IsHeader); } using (var str = new StringReader("Bar,Foo\r\n3,4")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Bar", new string(i.Span)), i => Assert.Equal("Foo", new string(i.Span)) ); Assert.True(res.IsHeader); } } // two, inexact { using (var str = new StringReader("Foo,Bar,Fizz\r\na,b,c\r\n")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Foo", new string(i.Span)), i => Assert.Equal("Bar", new string(i.Span)), i => Assert.Equal("Fizz", new string(i.Span)) ); Assert.True(res.IsHeader); } using (var str = new StringReader("Bar,Fizz,Foo\r\n1,2,3")) { using var charLookup = ReaderStateMachine.MakeCharacterLookup(config.MemoryPool, config.EscapedValueStartAndStop, config.ValueSeparator, config.EscapeValueEscapeChar, config.CommentChar); using var reader = new HeadersReader <_JustHeaders>(config, charLookup, str, new BufferWithPushback(MemoryPool <char> .Shared, 500)); var res = reader.Read(); Assert.Collection( ToEnumerable(res.Headers), i => Assert.Equal("Bar", new string(i.Span)), i => Assert.Equal("Fizz", new string(i.Span)), i => Assert.Equal("Foo", new string(i.Span)) ); Assert.True(res.IsHeader); } } }