code.gitea.io/gitea@v1.22.3/modules/git/parse_nogogit_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 //go:build !gogit 5 6 package git 7 8 import ( 9 "testing" 10 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestParseTreeEntriesLong(t *testing.T) { 15 objectFormat := Sha1ObjectFormat 16 17 testCases := []struct { 18 Input string 19 Expected []*TreeEntry 20 }{ 21 { 22 Input: `100644 blob ea0d83c9081af9500ac9f804101b3fd0a5c293af 8218 README.md 23 100644 blob 037f27dc9d353ae4fd50f0474b2194c593914e35 4681 README_ZH.md 24 100644 blob 9846a94f7e8350a916632929d0fda38c90dd2ca8 429 SECURITY.md 25 040000 tree 84b90550547016f73c5dd3f50dea662389e67b6d - assets 26 `, 27 Expected: []*TreeEntry{ 28 { 29 ID: MustIDFromString("ea0d83c9081af9500ac9f804101b3fd0a5c293af"), 30 name: "README.md", 31 entryMode: EntryModeBlob, 32 size: 8218, 33 sized: true, 34 }, 35 { 36 ID: MustIDFromString("037f27dc9d353ae4fd50f0474b2194c593914e35"), 37 name: "README_ZH.md", 38 entryMode: EntryModeBlob, 39 size: 4681, 40 sized: true, 41 }, 42 { 43 ID: MustIDFromString("9846a94f7e8350a916632929d0fda38c90dd2ca8"), 44 name: "SECURITY.md", 45 entryMode: EntryModeBlob, 46 size: 429, 47 sized: true, 48 }, 49 { 50 ID: MustIDFromString("84b90550547016f73c5dd3f50dea662389e67b6d"), 51 name: "assets", 52 entryMode: EntryModeTree, 53 sized: true, 54 }, 55 }, 56 }, 57 } 58 for _, testCase := range testCases { 59 entries, err := ParseTreeEntries(objectFormat, []byte(testCase.Input)) 60 assert.NoError(t, err) 61 assert.Len(t, entries, len(testCase.Expected)) 62 for i, entry := range entries { 63 assert.EqualValues(t, testCase.Expected[i], entry) 64 } 65 } 66 } 67 68 func TestParseTreeEntriesShort(t *testing.T) { 69 objectFormat := Sha1ObjectFormat 70 71 testCases := []struct { 72 Input string 73 Expected []*TreeEntry 74 }{ 75 { 76 Input: `100644 blob ea0d83c9081af9500ac9f804101b3fd0a5c293af README.md 77 040000 tree 84b90550547016f73c5dd3f50dea662389e67b6d assets 78 `, 79 Expected: []*TreeEntry{ 80 { 81 ID: MustIDFromString("ea0d83c9081af9500ac9f804101b3fd0a5c293af"), 82 name: "README.md", 83 entryMode: EntryModeBlob, 84 }, 85 { 86 ID: MustIDFromString("84b90550547016f73c5dd3f50dea662389e67b6d"), 87 name: "assets", 88 entryMode: EntryModeTree, 89 }, 90 }, 91 }, 92 } 93 for _, testCase := range testCases { 94 entries, err := ParseTreeEntries(objectFormat, []byte(testCase.Input)) 95 assert.NoError(t, err) 96 assert.Len(t, entries, len(testCase.Expected)) 97 for i, entry := range entries { 98 assert.EqualValues(t, testCase.Expected[i], entry) 99 } 100 } 101 } 102 103 func TestParseTreeEntriesInvalid(t *testing.T) { 104 // there was a panic: "runtime error: slice bounds out of range" when the input was invalid: #20315 105 entries, err := ParseTreeEntries(Sha1ObjectFormat, []byte("100644 blob ea0d83c9081af9500ac9f804101b3fd0a5c293af")) 106 assert.Error(t, err) 107 assert.Len(t, entries, 0) 108 }