1package lfs23import (4 "errors"5 "path"6 "strconv"7 "testing"8)910func TestReadPointer(t *testing.T) {11 cases := []struct {12 name string13 content string14 want Pointer15 wantErr error16 wantErrp interface{}17 }{18 {19 name: "valid pointer",20 content: `version https://git-lfs.github.com/spec/v121oid sha256:123456789012345678901234567890123456789012345678901234567890123422size 123423`,24 want: Pointer{25 Oid: "1234567890123456789012345678901234567890123456789012345678901234",26 Size: 1234,27 },28 },29 {30 name: "invalid prefix",31 content: `version https://foobar/spec/v232oid sha256:123456789012345678901234567890123456789012345678901234567890123433size 123434`,35 wantErr: ErrMissingPrefix,36 },37 {38 name: "invalid oid",39 content: `version https://git-lfs.github.com/spec/v140oid sha256:&2345a78$01234567890123456789012345678901234567890123456789012341size 123442`,43 wantErr: ErrInvalidOIDFormat,44 },45 {46 name: "invalid size",47 content: `version https://git-lfs.github.com/spec/v148oid sha256:123456789012345678901234567890123456789012345678901234567890123449size abc50`,51 wantErrp: &strconv.NumError{},52 },53 {54 name: "invalid structure",55 content: `version https://git-lfs.github.com/spec/v156`,57 wantErr: ErrInvalidStructure,58 },59 {60 name: "empty pointer",61 wantErr: ErrMissingPrefix,62 },63 }6465 for _, tc := range cases {66 t.Run(tc.name, func(t *testing.T) {67 p, err := ReadPointerFromBuffer([]byte(tc.content))68 if err != tc.wantErr && !errors.As(err, &tc.wantErrp) {69 t.Errorf("ReadPointerFromBuffer() error = %v(%T), wantErr %v(%T)", err, err, tc.wantErr, tc.wantErr)70 return71 }72 if err != nil {73 return74 }7576 if err == nil {77 if !p.IsValid() {78 t.Errorf("Expected a valid pointer")79 return80 }81 if path.Join(p.Oid[:2], p.Oid[2:4], p.Oid) != p.RelativePath() {82 t.Errorf("Expected a valid relative path")83 return84 }85 }8687 if p.Oid != tc.want.Oid {88 t.Errorf("ReadPointerFromBuffer() oid = %v, want %v", p.Oid, tc.want.Oid)89 }90 if p.Size != tc.want.Size {91 t.Errorf("ReadPointerFromBuffer() size = %v, want %v", p.Size, tc.want.Size)92 }93 })94 }95}