aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-07 11:20:51 +0000
committerGravatar Runxi Yu2026-06-07 11:20:51 +0000
commit2df6468de26a623693852445768a00fb54ca768b (patch)
tree66e581b7f7a76f8e379653b3c9a65498abcefdd6
parentinternal/testgit: LsTree (diff)
signatureNo signature
object/tree/mode: Parser tests
-rw-r--r--object/tree/mode/parse_test.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/object/tree/mode/parse_test.go b/object/tree/mode/parse_test.go
new file mode 100644
index 00000000..7f4ef623
--- /dev/null
+++ b/object/tree/mode/parse_test.go
@@ -0,0 +1,64 @@
+package mode_test
+
+import (
+ "errors"
+ "testing"
+
+ "lindenii.org/go/furgit/object/tree/mode"
+)
+
+func TestParse(t *testing.T) {
+ t.Parallel()
+
+ for _, tc := range []struct {
+ raw string
+ want mode.Mode
+ }{
+ {raw: "40000", want: mode.Directory},
+ {raw: "100644", want: mode.Regular},
+ {raw: "100755", want: mode.Executable},
+ {raw: "120000", want: mode.Symlink},
+ {raw: "160000", want: mode.Gitlink},
+ } {
+ t.Run(tc.raw, func(t *testing.T) {
+ t.Parallel()
+
+ got, err := mode.Parse([]byte(tc.raw))
+ if err != nil {
+ t.Fatalf("Parse(%q): %v", tc.raw, err)
+ }
+
+ if got != tc.want {
+ t.Fatalf("Parse(%q) = %o, want %o", tc.raw, got, tc.want)
+ }
+ })
+ }
+}
+
+func TestParseMalformed(t *testing.T) {
+ t.Parallel()
+
+ for _, tc := range []struct {
+ name string
+ raw string
+ }{
+ {name: "empty", raw: ""},
+ {name: "zero-padded-directory", raw: "040000"},
+ {name: "zero-padded-regular", raw: "0100644"},
+ {name: "bare-zero", raw: "0"},
+ {name: "non-octal-digit", raw: "100648"},
+ {name: "non-octal-letter", raw: "10064x"},
+ {name: "unsupported", raw: "100640"},
+ {name: "unsupported-directory-variant", raw: "40755"},
+ {name: "too-long", raw: "1006440"},
+ } {
+ t.Run(tc.name, func(t *testing.T) {
+ t.Parallel()
+
+ _, err := mode.Parse([]byte(tc.raw))
+ if !errors.Is(err, mode.ErrInvalidMode) {
+ t.Fatalf("Parse(%q) error = %v, want ErrInvalidMode", tc.raw, err)
+ }
+ })
+ }
+}