diff options
Diffstat (limited to 'src/exercises')
-rw-r--r-- | src/exercises/exercise.go | 38 | ||||
-rw-r--r-- | src/exercises/exercises_suite_test.go | 53 | ||||
-rw-r--r-- | src/exercises/list.go | 44 | ||||
-rw-r--r-- | src/exercises/runner.go | 29 |
4 files changed, 0 insertions, 164 deletions
diff --git a/src/exercises/exercise.go b/src/exercises/exercise.go deleted file mode 100644 index 22700c8..0000000 --- a/src/exercises/exercise.go +++ /dev/null @@ -1,38 +0,0 @@ -package exercises - -import ( - "os" - "regexp" -) - -var notDoneRegex = regexp.MustCompile(`(?m)^\s*///?\s*I\s+AM\s+NOT\s+DONE`) - -type Exercise struct { - Name string - Path string - Mode string - Hint string -} - -func (e Exercise) State() State { - data, err := os.ReadFile(e.Path) - if err != nil { - return Pending - } - - if notDoneRegex.Match(data) { - return Pending - } - return Done -} - -type State int - -const ( - Pending State = iota + 1 - Done -) - -func (s State) String() string { - return [...]string{"Pending", "Done"}[s-1] -} diff --git a/src/exercises/exercises_suite_test.go b/src/exercises/exercises_suite_test.go deleted file mode 100644 index c916326..0000000 --- a/src/exercises/exercises_suite_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package exercises_test - -import ( - "os" - "testing" - - "github.com/mauricioabreu/golings/src/exercises" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -func TestExercises(t *testing.T) { - RegisterFailHandler(Fail) - RunSpecs(t, "Exercises Suite") -} - -var _ = Describe("Exercises", func() { - Describe("Checking exercise state", func() { - When("'I AM NOT DONE' comment is still there", func() { - It("has the Pending state", func() { - file, err := os.CreateTemp("/tmp", "exercise*.go") - file.Write([]byte(`// exercise1.go - // I AM NOT DONE - package main - - func main() { - - } - `)) - Expect(err).To(BeNil()) - - defer os.Remove(file.Name()) - - ex := exercises.Exercise{Path: file.Name()} - - Expect(ex.State()).To(Equal(exercises.Pending)) - }) - }) - - When("'I AM NOT DONE' comment is not there", func() { - It("has the Done state", func() { - file, err := os.CreateTemp("/tmp", "exercise*.go") - Expect(err).To(BeNil()) - - defer os.Remove(file.Name()) - - ex := exercises.Exercise{Path: file.Name()} - - Expect(ex.State()).To(Equal(exercises.Done)) - }) - }) - }) -}) diff --git a/src/exercises/list.go b/src/exercises/list.go deleted file mode 100644 index c0c7261..0000000 --- a/src/exercises/list.go +++ /dev/null @@ -1,44 +0,0 @@ -package exercises - -import ( - "errors" - "os" - - "github.com/pelletier/go-toml/v2" -) - -var ErrExerciseNotFound = errors.New("exercise not found") - -type Info struct { - Exercises []Exercise -} - -func List() ([]Exercise, error) { - var info Info - - data, err := os.ReadFile("info.toml") - if err != nil { - return info.Exercises, err - } - - if err := toml.Unmarshal(data, &info); err != nil { - return info.Exercises, err - } - - return info.Exercises, nil -} - -func Find(exercise string) (Exercise, error) { - exs, err := List() - if err != nil { - return Exercise{}, err - } - - for _, ex := range exs { - if ex.Name == exercise { - return ex, nil - } - } - - return Exercise{}, ErrExerciseNotFound -} diff --git a/src/exercises/runner.go b/src/exercises/runner.go deleted file mode 100644 index d034093..0000000 --- a/src/exercises/runner.go +++ /dev/null @@ -1,29 +0,0 @@ -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 -} |