drone/git/sharedrepo/line_number_test.go

95 lines
2.5 KiB
Go

// Copyright 2023 Harness, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package sharedrepo
import (
"math"
"testing"
"github.com/stretchr/testify/assert"
)
func Test_lineNumberIsEOF(t *testing.T) {
assert.True(t, lineNumberEOF.IsEOF(), "lineNumberEOF should be EOF")
assert.True(t, lineNumber(math.MaxInt64).IsEOF(), "lineNumberEOF should be EOF")
assert.False(t, lineNumber(1).IsEOF(), "1 should not be EOF")
}
func Test_lineNumberString(t *testing.T) {
assert.Equal(t, "eof", lineNumberEOF.String(), "lineNumberEOF should be 'eof'")
assert.Equal(t, "eof", lineNumber(math.MaxInt64).String(), "math.MaxInt64 should be 'eof'")
assert.Equal(t, "1", lineNumber(1).String(), "1 should be '1'")
}
func Test_parseLineNumber(t *testing.T) {
tests := []struct {
name string
arg []byte
wantErr string
want lineNumber
}{
{
name: "test empty",
arg: nil,
wantErr: "line number can't be empty",
},
{
name: "test not a number",
arg: []byte("test"),
wantErr: "unable to parse",
},
{
name: "test maxInt64+1 fails",
arg: []byte("9223372036854775808"),
wantErr: "unable to parse",
},
{
name: "test smaller than 1",
arg: []byte("0"),
wantErr: "line numbering starts at 1",
},
{
name: "test maxInt64 not allowed",
arg: []byte("9223372036854775807"),
wantErr: "line numbering ends at 9223372036854775806",
},
{
name: "test smallest valid number (1)",
arg: []byte("1"),
want: 1,
},
{
name: "test biggest valid number (maxInt64-1)",
arg: []byte("9223372036854775806"),
want: 9223372036854775806,
},
{
name: "test eof",
arg: []byte("eof"),
want: lineNumberEOF,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := parseLineNumber(tt.arg)
if tt.wantErr != "" {
assert.ErrorContains(t, err, tt.wantErr, "error doesn't match expected.")
} else {
assert.Equal(t, tt.want, got, "parsed valued doesn't match expected")
}
})
}
}