66 "os/exec"
77 "path/filepath"
88 "plugin"
9+ "strings"
910)
1011
1112type PluginProcessor struct {
@@ -32,7 +33,7 @@ func (p PluginProcessor) CallFunc(input *[]byte) (string, error) {
3233 }
3334
3435 // Look up the Process function
35- symProcess , err := plug .Lookup ("Part" + p .Args .part )
36+ symProcess , err := plug .Lookup ("Part" + p .Args .Part )
3637 if err != nil {
3738 return "" , fmt .Errorf ("error looking up process: %v" , err )
3839 }
@@ -47,22 +48,24 @@ func (p PluginProcessor) CallFunc(input *[]byte) (string, error) {
4748 return processFunc (string (* input )), nil
4849}
4950
50- func (p PluginProcessor ) RunTests () {
51- cmd := exec .Command ("go" , "test" , fmt .Sprintf ("./%s/day%s/" , p .Args .year , p .Args .day ))
51+ func (p PluginProcessor ) RunTests () error {
52+ cmd := exec .Command ("go" , "test" , fmt .Sprintf ("./%s/day%s/" , p .Args .Year , p .Args .Day ))
5253 cmd .Stdout = os .Stdout
5354 cmd .Stderr = os .Stderr
5455
5556 fmt .Printf ("\n Running tests: %s\n " , cmd .String ())
5657
5758 if err := cmd .Run (); err != nil {
5859 fmt .Println ("Tests failed." )
59- return
60+ return err
6061 }
62+
63+ return nil
6164}
6265
6366func (p PluginProcessor ) GetInput () (* []byte , error ) {
6467 // Determine the input file path
65- path := filepath .Join ("./" , p .Args .year , "day" + p .Args .day , "input.txt" )
68+ path := filepath .Join ("./" , p .Args .Year , "day" + p .Args .Day , "input.txt" )
6669
6770 // Read the input file
6871 data , err := os .ReadFile (path )
@@ -76,3 +79,59 @@ func (p PluginProcessor) GetInput() (*[]byte, error) {
7679
7780 return & data , nil
7881}
82+
83+ func GetAllPluginProcessors (args Args ) ([]PluginProcessor , error ) {
84+ var baseDir = filepath .Join ("./" , args .Year )
85+ var processors []PluginProcessor
86+
87+ err := filepath .Walk (baseDir , func (path string , info os.FileInfo , err error ) error {
88+ if err != nil {
89+ return err
90+ }
91+
92+ if info .IsDir () {
93+ return nil
94+ }
95+
96+ parts := strings .Split (path , string (os .PathSeparator ))
97+ if len (parts ) != 3 {
98+ return nil
99+ }
100+
101+ if ! strings .HasPrefix (parts [1 ], "day" ) {
102+ return nil
103+ }
104+
105+ if ! strings .HasPrefix (parts [2 ], "part" ) || strings .Contains (parts [2 ], "test" ) || ! strings .HasSuffix (parts [2 ], ".go" ) {
106+ return nil
107+ }
108+
109+ year := parts [0 ]
110+ day := parts [1 ][3 :]
111+ part := parts [2 ][4 : len (parts [2 ])- 3 ]
112+
113+ args := Args {
114+ Year : year ,
115+ Day : day ,
116+ Part : part ,
117+ }
118+ args .path , err = args .getPath ()
119+ if err != nil {
120+ return err
121+ }
122+
123+ processors = append (processors , PluginProcessor {
124+ Args : args ,
125+ })
126+
127+ return nil
128+ })
129+
130+ if err != nil {
131+ fmt .Println ("Error scanning directories:" , err )
132+
133+ return nil , err
134+ }
135+
136+ return processors , nil
137+ }
0 commit comments