@@ -221,6 +221,29 @@ func TestBuilder_BuildSubtreeReturnsBoundedLazyChildren(t *testing.T) {
221221 }
222222}
223223
224+ func TestBuilder_BuildSubtreeDoesNotDuplicateTopLevelFilesUnderRootPackage (t * testing.T ) {
225+ db := setupDB (t )
226+ createNode (t , db , model.Node {QualifiedName : "github.com/example/project" , Kind : model .NodeKindPackage , Name : "project" , FilePath : "." , StartLine : 1 , EndLine : 1 , Language : "go" })
227+ createNode (t , db , model.Node {QualifiedName : "context.go" , Kind : model .NodeKindFile , Name : "context.go" , FilePath : "context.go" , StartLine : 1 , EndLine : 40 , Language : "go" })
228+ createNode (t , db , model.Node {QualifiedName : "trace.Context" , Kind : model .NodeKindFunction , Name : "Context" , FilePath : "context.go" , StartLine : 10 , EndLine : 20 , Language : "go" })
229+
230+ builder := & wikiindex.Builder {DB : db , OutDir : "docs" }
231+ root , err := builder .BuildSubtree (context .Background (), "" , 1 )
232+ if err != nil {
233+ t .Fatalf ("BuildSubtree root: %v" , err )
234+ }
235+ if pkg := ragindex .FindNode (root , "package:." ); pkg != nil {
236+ t .Fatalf ("root package should be folded into root, got %#v" , pkg )
237+ }
238+ fileNode := ragindex .FindNode (root , "file:context.go" )
239+ if fileNode == nil {
240+ t .Fatalf ("expected top-level file under root: %#v" , root .Children )
241+ }
242+ if ! fileNode .HasChildren || len (fileNode .Children ) != 0 {
243+ t .Fatalf ("top-level file lazy state = %#v" , fileNode )
244+ }
245+ }
246+
224247func TestBuilder_RespectsExclude (t * testing.T ) {
225248 db := setupDB (t )
226249 tmpDir := t .TempDir ()
0 commit comments