Skip to content

Commit ae8ca99

Browse files
committed
test(output): Add tree-only mode tests for generator and formats
- Add TestSetTreeOnlyMode to verify setter method - Add TestPrepareTemplateDataTreeOnly to verify empty files with structure - Add tree-only tests for markdown, text, and XML format renderers
1 parent 5cb2552 commit ae8ca99

2 files changed

Lines changed: 146 additions & 0 deletions

File tree

internal/generator/formats/formats_test.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,82 @@ func createTestTemplateData() generator.TemplateData {
156156
}
157157
}
158158

159+
func createTreeOnlyTemplateData() generator.TemplateData {
160+
return generator.TemplateData{
161+
Structure: "test-project/\n├── src/\n│ └── main.go\n└── README.md\n",
162+
Files: []generator.FileData{},
163+
}
164+
}
165+
166+
func TestMarkdownFormatTreeOnly(t *testing.T) {
167+
format := &MarkdownFormat{}
168+
data := createTreeOnlyTemplateData()
169+
170+
content, tokens, err := format.Render(data)
171+
if err != nil {
172+
t.Fatalf("Render failed: %v", err)
173+
}
174+
175+
if !strings.Contains(content, "# Project Structure") {
176+
t.Errorf("Expected content to contain '# Project Structure'")
177+
}
178+
if !strings.Contains(content, "test-project/") {
179+
t.Errorf("Expected content to contain 'test-project/'")
180+
}
181+
if strings.Contains(content, "# Project Files") {
182+
t.Errorf("Expected content to NOT contain '# Project Files' in tree-only mode")
183+
}
184+
if tokens <= 0 {
185+
t.Errorf("Expected tokens to be positive, got %d", tokens)
186+
}
187+
}
188+
189+
func TestTxtFormatTreeOnly(t *testing.T) {
190+
format := &TxtFormat{}
191+
data := createTreeOnlyTemplateData()
192+
193+
content, tokens, err := format.Render(data)
194+
if err != nil {
195+
t.Fatalf("Render failed: %v", err)
196+
}
197+
198+
if !strings.Contains(content, "PROJECT STRUCTURE") {
199+
t.Errorf("Expected content to contain 'PROJECT STRUCTURE'")
200+
}
201+
if !strings.Contains(content, "test-project/") {
202+
t.Errorf("Expected content to contain 'test-project/'")
203+
}
204+
if strings.Contains(content, "PROJECT FILES") {
205+
t.Errorf("Expected content to NOT contain 'PROJECT FILES' in tree-only mode")
206+
}
207+
if tokens <= 0 {
208+
t.Errorf("Expected tokens to be positive, got %d", tokens)
209+
}
210+
}
211+
212+
func TestXMLFormatTreeOnly(t *testing.T) {
213+
format := &XMLFormat{}
214+
data := createTreeOnlyTemplateData()
215+
216+
content, tokens, err := format.Render(data)
217+
if err != nil {
218+
t.Fatalf("Render failed: %v", err)
219+
}
220+
221+
if !strings.Contains(content, "<?xml") {
222+
t.Errorf("Expected content to contain '<?xml'")
223+
}
224+
if !strings.Contains(content, "<project>") {
225+
t.Errorf("Expected content to contain '<project>'")
226+
}
227+
if strings.Contains(content, "<file path=") {
228+
t.Errorf("Expected content to NOT contain file elements in tree-only mode")
229+
}
230+
if tokens <= 0 {
231+
t.Errorf("Expected tokens to be positive, got %d", tokens)
232+
}
233+
}
234+
159235
func TestAddFileToTree(t *testing.T) {
160236
root := &directoryEntry{
161237
name: ".",

internal/generator/generator_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,76 @@ func TestGenerateStringWithNoFormat(t *testing.T) {
214214
}
215215
}
216216

217+
func TestSetTreeOnlyMode(t *testing.T) {
218+
gen := NewGenerator(".", nil, nil, "", false)
219+
220+
if gen.TreeOnly {
221+
t.Errorf("Expected TreeOnly to be false by default")
222+
}
223+
224+
gen.SetTreeOnlyMode(true)
225+
if !gen.TreeOnly {
226+
t.Errorf("Expected TreeOnly to be true after SetTreeOnlyMode(true)")
227+
}
228+
229+
gen.SetTreeOnlyMode(false)
230+
if gen.TreeOnly {
231+
t.Errorf("Expected TreeOnly to be false after SetTreeOnlyMode(false)")
232+
}
233+
}
234+
235+
func TestPrepareTemplateDataTreeOnly(t *testing.T) {
236+
cache.ResetGlobalCache()
237+
238+
tempDir, err := os.MkdirTemp("", "generator-test-treeonly")
239+
if err != nil {
240+
t.Fatalf("Failed to create temp dir: %v", err)
241+
}
242+
defer os.RemoveAll(tempDir)
243+
244+
testFiles := []struct {
245+
path string
246+
content string
247+
}{
248+
{"file1.txt", "Content of file1"},
249+
{"file2.go", "package main\n\nfunc main() {}"},
250+
{"subdir/file3.txt", "Content of file3"},
251+
}
252+
253+
for _, tf := range testFiles {
254+
path := filepath.Join(tempDir, filepath.FromSlash(tf.path))
255+
dir := filepath.Dir(path)
256+
if err := os.MkdirAll(dir, 0755); err != nil {
257+
t.Fatalf("Failed to create directory %s: %v", dir, err)
258+
}
259+
if err := os.WriteFile(path, []byte(tf.content), 0644); err != nil {
260+
t.Fatalf("Failed to create file %s: %v", path, err)
261+
}
262+
}
263+
264+
gitIgnoreMgr, _ := filesystem.NewGitIgnoreManager(tempDir)
265+
filterMgr := filesystem.NewFilterManager()
266+
gen := NewGenerator(tempDir, gitIgnoreMgr, filterMgr, "", false)
267+
gen.SelectedFiles = map[string]bool{
268+
"file1.txt": true,
269+
"file2.go": true,
270+
"subdir/file3.txt": true,
271+
}
272+
gen.SetTreeOnlyMode(true)
273+
274+
data, err := gen.PrepareTemplateData()
275+
if err != nil {
276+
t.Fatalf("PrepareTemplateData failed: %v", err)
277+
}
278+
279+
if data.Structure == "" {
280+
t.Errorf("Expected Structure to be non-empty in tree-only mode")
281+
}
282+
if len(data.Files) != 0 {
283+
t.Errorf("Expected Files to be empty in tree-only mode, got %d files", len(data.Files))
284+
}
285+
}
286+
217287
type mockFormat struct {
218288
err error
219289
name string

0 commit comments

Comments
 (0)