fork of https://github.com/sourcegraph/zoekt
1package index
2
3import (
4 "strings"
5 "testing"
6
7 "github.com/sourcegraph/zoekt"
8)
9
10func TestShardName(t *testing.T) {
11 tests := []struct {
12 name string
13 indexDir string
14 prefix string
15 version int
16 shardNum int
17 expected string
18 }{
19 {
20 name: "short prefix",
21 indexDir: "index",
22 prefix: "short",
23 version: 1,
24 shardNum: 42,
25 expected: "index/short_v1.00042.zoekt",
26 },
27 {
28 name: "long prefix truncated",
29 indexDir: "index",
30 prefix: strings.Repeat("a", 300),
31 version: 2,
32 shardNum: 1,
33 expected: "index/" + strings.Repeat("a", 200) + "003ef1ba" + "_v2.00001.zoekt",
34 },
35 {
36 name: "empty indexDir",
37 prefix: "short",
38 version: 1,
39 expected: "short_v1.00000.zoekt",
40 },
41 }
42
43 for _, test := range tests {
44 t.Run(test.name, func(t *testing.T) {
45 actual := shardName(test.indexDir, test.prefix, test.version, test.shardNum)
46 if actual != test.expected {
47 t.Errorf("expected %q, got %q", test.expected, actual)
48 }
49 })
50 }
51}
52
53func TestDetermineLanguageIfUnknown(t *testing.T) {
54 tests := []struct {
55 name string
56 doc Document
57 wantLang string
58 skipContent bool
59 }{
60 {
61 name: "already has language",
62 doc: Document{
63 Name: "test.java",
64 Language: "Go",
65 Content: []byte("package main"),
66 },
67 wantLang: "Go",
68 },
69 {
70 name: "skipped file",
71 doc: Document{
72 Name: "large.js",
73 SkipReason: SkipReasonTooLarge,
74 Content: []byte(notIndexedMarker + "too large"),
75 },
76 wantLang: "JavaScript",
77 },
78 {
79 name: "skipped file with unknown extension",
80 doc: Document{
81 Name: "deadb33f",
82 SkipReason: SkipReasonBinary,
83 Content: []byte(notIndexedMarker + "binary"),
84 },
85 wantLang: "",
86 },
87 }
88
89 for _, tt := range tests {
90 t.Run(tt.name, func(t *testing.T) {
91 DetermineLanguageIfUnknown(&tt.doc)
92 if tt.doc.Language != tt.wantLang {
93 t.Errorf("DetermineLanguageIfUnknown() got language = %v, want %v", tt.doc.Language, tt.wantLang)
94 }
95 })
96 }
97}
98
99func TestShardBuilderAddDeterminesCategoryBeforeReplacingSkippedContent(t *testing.T) {
100 b, err := NewShardBuilder(&zoekt.Repository{})
101 if err != nil {
102 t.Fatalf("NewShardBuilder: %v", err)
103 }
104
105 err = b.Add(Document{
106 Name: "generated.go",
107 Content: []byte("// Code generated by protoc-gen-go. DO NOT EDIT.\npackage generated\n"),
108 SkipReason: SkipReasonTooManyTrigrams,
109 })
110 if err != nil {
111 t.Fatalf("Add: %v", err)
112 }
113
114 if len(b.categories) != 1 {
115 t.Fatalf("got %d categories, want 1", len(b.categories))
116 }
117
118 category, err := decodeCategory(b.categories[0])
119 if err != nil {
120 t.Fatalf("decodeCategory: %v", err)
121 }
122 if category != FileCategoryGenerated {
123 t.Fatalf("got category %v, want %v", category, FileCategoryGenerated)
124 }
125
126 if len(b.languages) != 2 {
127 t.Fatalf("got %d encoded language bytes, want 2", len(b.languages))
128 }
129
130 langCode := uint16(b.languages[0]) | uint16(b.languages[1])<<8
131 got, ok := b.languageMap["Go"]
132 if !ok {
133 t.Fatalf("languageMap missing Go entry: %#v", b.languageMap)
134 }
135 if got != langCode {
136 t.Fatalf("got stored language code %d, want Go=%d", langCode, got)
137 }
138}