From 6d20bd182df3dd4cadabc43bce421b58859a4d12 Mon Sep 17 00:00:00 2001 From: porosnicuadrian Date: Wed, 18 Nov 2020 15:58:14 +0200 Subject: [PATCH] Covered rjreader and removed the error for rjr.unreadByte function in getJSONOffsetLine --- config/rjreader.go | 14 +++--- config/rjreader_test.go | 96 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 101 insertions(+), 9 deletions(-) diff --git a/config/rjreader.go b/config/rjreader.go index 2ad932bd2..e01e64811 100644 --- a/config/rjreader.go +++ b/config/rjreader.go @@ -356,10 +356,9 @@ func (rjr *rjReader) getJSONOffsetLine(offset int64) (line, character int64) { character++ return nil } - rerr := rjr.UnreadByte() - if rerr != nil { - return rerr - } + // Unread byte return error only if rjr.indx is small or equal to 0 + // The value is greater than 0 so it's safe to not check the error + rjr.UnreadByte() } } return nil @@ -410,10 +409,9 @@ func (rjr *rjReader) getJSONOffsetLine(offset int64) (line, character int64) { break } } else { - rerr := rjr.UnreadByte() - if rerr != nil { - break - } + // Unread byte return error only if rjr.indx is small or equal to 0 + // The value is greater than 0 so it's safe to not check the error + rjr.UnreadByte() } } } diff --git a/config/rjreader_test.go b/config/rjreader_test.go index 9c24487a6..ab60e4c99 100644 --- a/config/rjreader_test.go +++ b/config/rjreader_test.go @@ -478,5 +478,99 @@ func TestGetErrorLine2(t *testing.T) { } else if expChar != character { t.Errorf("Expected line %v received:%v", expChar, character) } - +} + +func TestGetJSONOffsetLineFuncError(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte("{}")) + rjr.indx = 7 + var eLine, eCharachter int64 = 1, 0 + if line, character := rjr.getJSONOffsetLine(int64(3)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineReadStringEOF(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`{","}`)) + rjr.indx = 3 + var eLine, eCharachter int64 = 1, 0 + if line, character := rjr.getJSONOffsetLine(int64(5)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineReadString1(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`{,}, {val1, val2}`)) + rjr.indx = 0 + var eLine, eCharachter int64 = 1, 0 + if line, character := rjr.getJSONOffsetLine(int64(5)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineReadStringNilError1(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`" + +", {,}, {val1, val2}`)) + rjr.indx = 0 + var eLine, eCharachter int64 = 1, 0 + if line, character := rjr.getJSONOffsetLine(int64(3)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineReadLineCommentEOF(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`random/`)) + rjr.indx = 6 + var eLine, eCharachter int64 = 1, 0 + if line, character := rjr.getJSONOffsetLine(int64(5)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineReadLineCommentEOF1(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`random//`)) + rjr.indx = 6 + var eLine, eCharachter int64 = 1, 0 + if line, character := rjr.getJSONOffsetLine(int64(5)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineReadCommentEOF(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`random/*`)) + rjr.indx = 5 + var eLine, eCharachter int64 = 1, 0 + if line, character := rjr.getJSONOffsetLine(int64(5)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineReadCommentInvalidEnding(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`random/* + +**`)) + rjr.indx = 5 + var eLine, eCharachter int64 = 3, 2 + if line, character := rjr.getJSONOffsetLine(int64(5)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineReadComment1(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`/* +**`)) + rjr.indx = 0 + var eLine, eCharachter int64 = 3, 2 + if line, character := rjr.getJSONOffsetLine(int64(5)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } +} + +func TestGetJSONOffsetLineInvalidComment2(t *testing.T) { + rjr := NewRjReaderFromBytes([]byte(`/noComm`)) + rjr.indx = 0 + var eLine, eCharachter int64 = 1, 5 + if line, character := rjr.getJSONOffsetLine(int64(5)); line != eLine && character != eCharachter { + fmt.Printf("Expected %+v and %+v, received %+v and %+v", eLine, eCharachter, line, character) + } }