1- // Package gozero_test tests the go-zero extractor implementation.
2- package gozero_test
1+ // Package gozero tests the go-zero extractor implementation.
2+ package gozero
33
44import (
55 "errors"
66 "os"
77 "path/filepath"
88 "testing"
9-
10- "github.com/spencercjh/spec-forge/internal/extractor/gozero"
119)
1210
1311func TestNewDetector (t * testing.T ) {
14- d := gozero . NewDetector ()
12+ d := NewDetector ()
1513 if d == nil {
1614 t .Error ("NewDetector() should not return nil" )
1715 }
@@ -21,7 +19,7 @@ func TestDetector_Detect_NoGoMod(t *testing.T) {
2119 // Create temp dir without go.mod
2220 tmpDir := t .TempDir ()
2321
24- detector := gozero . NewDetector ()
22+ detector := NewDetector ()
2523 _ , err := detector .Detect (tmpDir )
2624
2725 if err == nil {
@@ -56,14 +54,14 @@ require (
5654 t .Fatalf ("Failed to create .api file: %v" , err )
5755 }
5856
59- detector := gozero . NewDetector ()
57+ detector := NewDetector ()
6058 info , err := detector .Detect (tmpDir )
6159 if err != nil {
6260 t .Fatalf ("Detect failed: %v" , err )
6361 }
6462
65- if info .BuildTool != gozero . BuildToolGoModules {
66- t .Errorf ("BuildTool = %s, want %s" , info .BuildTool , gozero . BuildToolGoModules )
63+ if info .BuildTool != BuildToolGoModules {
64+ t .Errorf ("BuildTool = %s, want %s" , info .BuildTool , BuildToolGoModules )
6765 }
6866
6967 if info .BuildFilePath != goModPath {
@@ -74,9 +72,9 @@ require (
7472 t .Fatal ("FrameworkData should not be nil" )
7573 }
7674
77- goZeroInfo , ok := info .FrameworkData .(* gozero. Info )
75+ goZeroInfo , ok := info .FrameworkData .(* Info )
7876 if ! ok {
79- t .Fatal ("FrameworkData should be *gozero. Info" )
77+ t .Fatal ("FrameworkData should be *Info" )
8078 }
8179
8280 if goZeroInfo .ModuleName != "example.com/testproject" {
@@ -117,7 +115,7 @@ require github.com/zeromicro/go-zero v1.5.0
117115 t .Fatalf ("Failed to create .api file: %v" , err )
118116 }
119117
120- detector := gozero . NewDetector ()
118+ detector := NewDetector ()
121119 info , err := detector .Detect (tmpDir )
122120 if err != nil {
123121 t .Fatalf ("Detect failed: %v" , err )
@@ -127,9 +125,9 @@ require github.com/zeromicro/go-zero v1.5.0
127125 t .Fatal ("FrameworkData should not be nil" )
128126 }
129127
130- goZeroInfo , ok := info .FrameworkData .(* gozero. Info )
128+ goZeroInfo , ok := info .FrameworkData .(* Info )
131129 if ! ok {
132- t .Fatal ("FrameworkData should be *gozero. Info" )
130+ t .Fatal ("FrameworkData should be *Info" )
133131 }
134132
135133 if ! goZeroInfo .HasGoZeroDeps {
@@ -158,14 +156,14 @@ require (
158156 t .Fatalf ("Failed to create go.mod: %v" , err )
159157 }
160158
161- detector := gozero . NewDetector ()
159+ detector := NewDetector ()
162160 _ , err := detector .Detect (tmpDir )
163161 if err == nil {
164162 t .Fatal ("expected Detect to fail when no go-zero dependencies are present" )
165163 }
166164
167- if _ , ok := errors.AsType [* gozero. ErrNotGoZeroProject ](err ); ! ok {
168- t .Errorf ("expected error to be *gozero. ErrNotGoZeroProject, got: %T" , err )
165+ if _ , ok := errors.AsType [* ErrNotGoZeroProject ](err ); ! ok {
166+ t .Errorf ("expected error to be *ErrNotGoZeroProject, got: %T" , err )
169167 }
170168}
171169
@@ -200,7 +198,7 @@ require github.com/zeromicro/go-zero v1.6.0
200198 t .Fatalf ("Failed to create .api file: %v" , err )
201199 }
202200
203- detector := gozero . NewDetector ()
201+ detector := NewDetector ()
204202 info , err := detector .Detect (tmpDir )
205203 if err != nil {
206204 t .Fatalf ("Detect failed: %v" , err )
@@ -210,9 +208,9 @@ require github.com/zeromicro/go-zero v1.6.0
210208 t .Fatal ("FrameworkData should not be nil" )
211209 }
212210
213- goZeroInfo , ok := info .FrameworkData .(* gozero. Info )
211+ goZeroInfo , ok := info .FrameworkData .(* Info )
214212 if ! ok {
215- t .Fatal ("FrameworkData should be *gozero. Info" )
213+ t .Fatal ("FrameworkData should be *Info" )
216214 }
217215
218216 if len (goZeroInfo .APIFiles ) != 2 {
@@ -252,7 +250,7 @@ require github.com/zeromicro/go-zero v1.6.0
252250 t .Fatalf ("Failed to create vendor .api file: %v" , err )
253251 }
254252
255- detector := gozero . NewDetector ()
253+ detector := NewDetector ()
256254 info , err := detector .Detect (tmpDir )
257255 if err != nil {
258256 t .Fatalf ("Detect failed: %v" , err )
@@ -262,9 +260,9 @@ require github.com/zeromicro/go-zero v1.6.0
262260 t .Fatal ("FrameworkData should not be nil" )
263261 }
264262
265- goZeroInfo , ok := info .FrameworkData .(* gozero. Info )
263+ goZeroInfo , ok := info .FrameworkData .(* Info )
266264 if ! ok {
267- t .Fatal ("FrameworkData should be *gozero. Info" )
265+ t .Fatal ("FrameworkData should be *Info" )
268266 }
269267
270268 // Should only find the main.api file, not the vendor one
@@ -309,7 +307,7 @@ require github.com/zeromicro/go-zero v1.6.0
309307 t .Fatalf ("Failed to create hidden .api file: %v" , err )
310308 }
311309
312- detector := gozero . NewDetector ()
310+ detector := NewDetector ()
313311 info , err := detector .Detect (tmpDir )
314312 if err != nil {
315313 t .Fatalf ("Detect failed: %v" , err )
@@ -319,9 +317,9 @@ require github.com/zeromicro/go-zero v1.6.0
319317 t .Fatal ("FrameworkData should not be nil" )
320318 }
321319
322- goZeroInfo , ok := info .FrameworkData .(* gozero. Info )
320+ goZeroInfo , ok := info .FrameworkData .(* Info )
323321 if ! ok {
324- t .Fatal ("FrameworkData should be *gozero. Info" )
322+ t .Fatal ("FrameworkData should be *Info" )
325323 }
326324
327325 // Should only find the main.api file, not the hidden one
@@ -331,7 +329,7 @@ require github.com/zeromicro/go-zero v1.6.0
331329}
332330
333331func TestDetector_Detect_InvalidPath (t * testing.T ) {
334- detector := gozero . NewDetector ()
332+ detector := NewDetector ()
335333 _ , err := detector .Detect ("/nonexistent/path/that/does/not/exist" )
336334
337335 if err == nil {
@@ -350,13 +348,36 @@ func TestDetector_Detect_EmptyProject(t *testing.T) {
350348 t .Fatalf ("Failed to create go.mod: %v" , err )
351349 }
352350
353- detector := gozero . NewDetector ()
351+ detector := NewDetector ()
354352 _ , err := detector .Detect (tmpDir )
355353 if err == nil {
356354 t .Fatal ("expected Detect to fail when no go-zero dependency is present" )
357355 }
358356
359- if _ , ok := errors.AsType [* gozero.ErrNotGoZeroProject ](err ); ! ok {
360- t .Errorf ("expected error to be *gozero.ErrNotGoZeroProject, got: %T" , err )
357+ if _ , ok := errors.AsType [* ErrNotGoZeroProject ](err ); ! ok {
358+ t .Errorf ("expected error to be *ErrNotGoZeroProject, got: %T" , err )
359+ }
360+ }
361+
362+ func TestDetector_findAPIFiles_RelativeDotPath (t * testing.T ) {
363+ dir := t .TempDir ()
364+
365+ // Create an .api file in the project root
366+ os .WriteFile (filepath .Join (dir , "main.api" ), []byte (`syntax = "v1"` ), 0o644 )
367+
368+ // Change to temp dir so "." resolves to it
369+ origDir , _ := os .Getwd ()
370+ defer os .Chdir (origDir )
371+ if err := os .Chdir (dir ); err != nil {
372+ t .Fatalf ("failed to chdir: %v" , err )
373+ }
374+
375+ d := NewDetector ()
376+ files , err := d .findAPIFiles ("." )
377+ if err != nil {
378+ t .Fatalf ("unexpected error: %v" , err )
379+ }
380+ if len (files ) == 0 {
381+ t .Fatal ("expected at least 1 .api file with relative \" .\" path, got 0" )
361382 }
362383}
0 commit comments