ref: 838017cbc6b2d8f5a3b4c134fec02a371b72e8e9
parent: 8dcbe65d1f2258eb44e5905d6a9b1eecbc22c444
author: Runxi Yu <me@runxiyu.org>
date: Thu Jan 29 17:23:34 EST 2026
tree: Add unit test for TreeEntryNameCompare
--- a/obj_tree_test.go
+++ b/obj_tree_test.go
@@ -351,3 +351,124 @@
t.Fatal("expected error for nil tree")}
}
+
+func TestTreeEntryNameCompare(t *testing.T) {+ t.Parallel()
+
+ tests := []struct {+ name string
+ entryName []byte
+ entryMode FileMode
+ searchName []byte
+ searchIsTree bool
+ want int
+ }{+ {+ name: "equal file names",
+ entryName: []byte("alpha"),+ entryMode: FileModeRegular,
+ searchName: []byte("alpha"),+ want: 0,
+ },
+ {+ name: "equal tree names",
+ entryName: []byte("dir"),+ entryMode: FileModeDir,
+ searchName: []byte("dir"),+ searchIsTree: true,
+ want: 0,
+ },
+ {+ name: "lexicographic less",
+ entryName: []byte("alpha"),+ entryMode: FileModeRegular,
+ searchName: []byte("beta"),+ want: -1,
+ },
+ {+ name: "lexicographic greater",
+ entryName: []byte("gamma"),+ entryMode: FileModeRegular,
+ searchName: []byte("beta"),+ want: 1,
+ },
+ {+ name: "file sorts before same-name dir",
+ entryName: []byte("same"),+ entryMode: FileModeRegular,
+ searchName: []byte("same"),+ searchIsTree: true,
+ want: -1,
+ },
+ {+ name: "dir sorts after same-name file",
+ entryName: []byte("same"),+ entryMode: FileModeDir,
+ searchName: []byte("same"),+ searchIsTree: false,
+ want: 1,
+ },
+ {+ name: "dir sorts before longer file",
+ entryName: []byte("a"),+ entryMode: FileModeDir,
+ searchName: []byte("ab"),+ searchIsTree: false,
+ want: -1,
+ },
+ {+ name: "file sorts before longer file",
+ entryName: []byte("a"),+ entryMode: FileModeRegular,
+ searchName: []byte("ab"),+ want: -1,
+ },
+ {+ name: "search tree compares after exact file name",
+ entryName: []byte("a"),+ entryMode: FileModeRegular,
+ searchName: []byte("a"),+ searchIsTree: true,
+ want: -1,
+ },
+ {+ name: "entry tree compares after exact search file",
+ entryName: []byte("a"),+ entryMode: FileModeDir,
+ searchName: []byte("a"),+ searchIsTree: false,
+ want: 1,
+ },
+ {+ name: "slash impact mid-compare",
+ entryName: []byte("a"),+ entryMode: FileModeDir,
+ searchName: []byte("a0"),+ searchIsTree: false,
+ want: -1,
+ },
+ {+ name: "file sorts after same prefix dir",
+ entryName: []byte("a0"),+ entryMode: FileModeRegular,
+ searchName: []byte("a"),+ searchIsTree: true,
+ want: 1,
+ },
+ }
+
+ for _, tt := range tests {+ tt := tt
+ t.Run(tt.name, func(t *testing.T) {+ got := TreeEntryNameCompare(tt.entryName, tt.entryMode, tt.searchName, tt.searchIsTree)
+ if got < 0 {+ got = -1
+ } else if got > 0 {+ got = 1
+ }
+ if got != tt.want {+ t.Fatalf("compare(%q,%v,%q,%v) = %d, want %d", tt.entryName, tt.entryMode, tt.searchName, tt.searchIsTree, got, tt.want)+ }
+ })
+ }
+}
--
⑨