aboutsummaryrefslogtreecommitdiffstats
path: root/src/exercises/runner.go
blob: d034093d31dd2e0bbb67078d5070e45cdb36077f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package exercises

import (
	"bytes"
	"fmt"
	"os/exec"
)

type Result struct {
	Exercise Exercise
	Out      string
	Err      string
}

func Run(name string) (Result, error) {
	exercise, err := Find(name)
	if err != nil {
		return Result{}, err
	}

	cmd := exec.Command("go", "run", fmt.Sprintf("./%s", exercise.Path))
	var stdout, stderr bytes.Buffer
	cmd.Stdout = &stdout
	cmd.Stderr = &stderr

	err = cmd.Run()

	return Result{Exercise: exercise, Out: stdout.String(), Err: stderr.String()}, err
}