Skip to content

Commit ec05be0

Browse files
committed
add tests
1 parent c387ea4 commit ec05be0

File tree

1 file changed

+188
-0
lines changed

1 file changed

+188
-0
lines changed

services/gitdiff/gitdiff_test.go

Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,3 +668,191 @@ func TestNoCrashes(t *testing.T) {
668668
ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff), "")
669669
}
670670
}
671+
672+
func TestBuildTree(t *testing.T) {
673+
tests := []struct {
674+
name string
675+
input []*DiffFile
676+
expected []*FileTreeNode
677+
}{
678+
{
679+
name: "Test case 1",
680+
input: []*DiffFile{
681+
{Name: "2/2", NameHash: "23b3d60a69a4b1bacb1a3b9ced0a8ac609efbf61"},
682+
{Name: "test1", NameHash: "b444ac06613fc8d63795be9ad0beaf55011936ac"},
683+
},
684+
expected: []*FileTreeNode{
685+
{
686+
Name: "2",
687+
IsFile: false,
688+
Children: []*FileTreeNode{
689+
{
690+
Name: "2",
691+
IsFile: true,
692+
File: &DiffFile{
693+
Name: "2/2",
694+
NameHash: "23b3d60a69a4b1bacb1a3b9ced0a8ac609efbf61",
695+
},
696+
},
697+
},
698+
},
699+
{
700+
Name: "test1",
701+
IsFile: true,
702+
File: &DiffFile{
703+
Name: "test1",
704+
NameHash: "b444ac06613fc8d63795be9ad0beaf55011936ac",
705+
},
706+
},
707+
},
708+
},
709+
{
710+
name: "Test case 2",
711+
input: []*DiffFile{
712+
{Name: "a/b/c", NameHash: "hash1"},
713+
{Name: "a/b/d", NameHash: "hash2"},
714+
{Name: "a/e", NameHash: "hash3"},
715+
{Name: "f", NameHash: "hash4"},
716+
},
717+
expected: []*FileTreeNode{
718+
{
719+
Name: "a",
720+
IsFile: false,
721+
Children: []*FileTreeNode{
722+
{
723+
Name: "b",
724+
IsFile: false,
725+
Children: []*FileTreeNode{
726+
{
727+
Name: "c",
728+
IsFile: true,
729+
File: &DiffFile{
730+
Name: "a/b/c",
731+
NameHash: "hash1",
732+
},
733+
},
734+
{
735+
Name: "d",
736+
IsFile: true,
737+
File: &DiffFile{
738+
Name: "a/b/d",
739+
NameHash: "hash2",
740+
},
741+
},
742+
},
743+
},
744+
{
745+
Name: "e",
746+
IsFile: true,
747+
File: &DiffFile{
748+
Name: "a/e",
749+
NameHash: "hash3",
750+
},
751+
},
752+
},
753+
},
754+
{
755+
Name: "f",
756+
IsFile: true,
757+
File: &DiffFile{
758+
Name: "f",
759+
NameHash: "hash4",
760+
},
761+
},
762+
},
763+
},
764+
{
765+
name: "Test case 3",
766+
input: []*DiffFile{
767+
{Name: "dir1/file1", NameHash: "hash1"},
768+
{Name: "dir1/file2", NameHash: "hash2"},
769+
{Name: "dir2/file3", NameHash: "hash3"},
770+
{Name: "dir2/file4", NameHash: "hash4"},
771+
{Name: "file5", NameHash: "hash5"},
772+
},
773+
expected: []*FileTreeNode{
774+
{
775+
Name: "dir1",
776+
IsFile: false,
777+
Children: []*FileTreeNode{
778+
{
779+
Name: "file1",
780+
IsFile: true,
781+
File: &DiffFile{
782+
Name: "dir1/file1",
783+
NameHash: "hash1",
784+
},
785+
},
786+
{
787+
Name: "file2",
788+
IsFile: true,
789+
File: &DiffFile{
790+
Name: "dir1/file2",
791+
NameHash: "hash2",
792+
},
793+
},
794+
},
795+
},
796+
{
797+
Name: "dir2",
798+
IsFile: false,
799+
Children: []*FileTreeNode{
800+
{
801+
Name: "file3",
802+
IsFile: true,
803+
File: &DiffFile{
804+
Name: "dir2/file3",
805+
NameHash: "hash3",
806+
},
807+
},
808+
{
809+
Name: "file4",
810+
IsFile: true,
811+
File: &DiffFile{
812+
Name: "dir2/file4",
813+
NameHash: "hash4",
814+
},
815+
},
816+
},
817+
},
818+
{
819+
Name: "file5",
820+
IsFile: true,
821+
File: &DiffFile{
822+
Name: "file5",
823+
NameHash: "hash5",
824+
},
825+
},
826+
},
827+
},
828+
}
829+
830+
for _, tt := range tests {
831+
t.Run(tt.name, func(t *testing.T) {
832+
result := buildTree(tt.input)
833+
if !compareFileTreeNodes(result, tt.expected) {
834+
t.Errorf("Expected %v, but got %v", tt.expected, result)
835+
}
836+
})
837+
}
838+
}
839+
840+
func compareFileTreeNodes(a, b []*FileTreeNode) bool {
841+
if len(a) != len(b) {
842+
return false
843+
}
844+
for i := range a {
845+
if a[i].Name != b[i].Name || a[i].IsFile != b[i].IsFile {
846+
return false
847+
}
848+
if a[i].IsFile && b[i].IsFile {
849+
if a[i].File.Name != b[i].File.Name || a[i].File.NameHash != b[i].File.NameHash {
850+
return false
851+
}
852+
}
853+
if !compareFileTreeNodes(a[i].Children, b[i].Children) {
854+
return false
855+
}
856+
}
857+
return true
858+
}

0 commit comments

Comments
 (0)