code.gitea.io/gitea@v1.19.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 testCases := []struct { 16 Input string 17 Expected []*TreeEntry 18 }{ 19 { 20 Input: `100644 blob ea0d83c9081af9500ac9f804101b3fd0a5c293af 8218 README.md 21 100644 blob 037f27dc9d353ae4fd50f0474b2194c593914e35 4681 README_ZH.md 22 100644 blob 9846a94f7e8350a916632929d0fda38c90dd2ca8 429 SECURITY.md 23 040000 tree 84b90550547016f73c5dd3f50dea662389e67b6d - assets 24 `, 25 Expected: []*TreeEntry{ 26 { 27 ID: MustIDFromString("ea0d83c9081af9500ac9f804101b3fd0a5c293af"), 28 name: "README.md", 29 entryMode: EntryModeBlob, 30 size: 8218, 31 sized: true, 32 }, 33 { 34 ID: MustIDFromString("037f27dc9d353ae4fd50f0474b2194c593914e35"), 35 name: "README_ZH.md", 36 entryMode: EntryModeBlob, 37 size: 4681, 38 sized: true, 39 }, 40 { 41 ID: MustIDFromString("9846a94f7e8350a916632929d0fda38c90dd2ca8"), 42 name: "SECURITY.md", 43 entryMode: EntryModeBlob, 44 size: 429, 45 sized: true, 46 }, 47 { 48 ID: MustIDFromString("84b90550547016f73c5dd3f50dea662389e67b6d"), 49 name: "assets", 50 entryMode: EntryModeTree, 51 sized: true, 52 }, 53 }, 54 }, 55 } 56 for _, testCase := range testCases { 57 entries, err := ParseTreeEntries([]byte(testCase.Input)) 58 assert.NoError(t, err) 59 assert.Len(t, entries, len(testCase.Expected)) 60 for i, entry := range entries { 61 assert.EqualValues(t, testCase.Expected[i], entry) 62 } 63 } 64 } 65 66 func TestParseTreeEntriesShort(t *testing.T) { 67 testCases := []struct { 68 Input string 69 Expected []*TreeEntry 70 }{ 71 { 72 Input: `100644 blob ea0d83c9081af9500ac9f804101b3fd0a5c293af README.md 73 040000 tree 84b90550547016f73c5dd3f50dea662389e67b6d assets 74 `, 75 Expected: []*TreeEntry{ 76 { 77 ID: MustIDFromString("ea0d83c9081af9500ac9f804101b3fd0a5c293af"), 78 name: "README.md", 79 entryMode: EntryModeBlob, 80 }, 81 { 82 ID: MustIDFromString("84b90550547016f73c5dd3f50dea662389e67b6d"), 83 name: "assets", 84 entryMode: EntryModeTree, 85 }, 86 }, 87 }, 88 } 89 for _, testCase := range testCases { 90 entries, err := ParseTreeEntries([]byte(testCase.Input)) 91 assert.NoError(t, err) 92 assert.Len(t, entries, len(testCase.Expected)) 93 for i, entry := range entries { 94 assert.EqualValues(t, testCase.Expected[i], entry) 95 } 96 } 97 } 98 99 func TestParseTreeEntriesInvalid(t *testing.T) { 100 // there was a panic: "runtime error: slice bounds out of range" when the input was invalid: #20315 101 entries, err := ParseTreeEntries([]byte("100644 blob ea0d83c9081af9500ac9f804101b3fd0a5c293af")) 102 assert.Error(t, err) 103 assert.Len(t, entries, 0) 104 }