diff options
-rw-r--r-- | go.mod | 4 | ||||
-rw-r--r-- | go.sum | 8 | ||||
-rw-r--r-- | golings/cmd/fixtures/info.toml | 11 | ||||
-rw-r--r-- | golings/cmd/hint.go | 2 | ||||
-rw-r--r-- | golings/cmd/list.go | 26 | ||||
-rw-r--r-- | golings/cmd/list_suite_test.go | 27 | ||||
-rw-r--r-- | golings/cmd/run.go | 2 | ||||
-rw-r--r-- | golings/cmd/verify.go | 4 | ||||
-rw-r--r-- | golings/exercises/list.go | 8 | ||||
-rw-r--r-- | golings/exercises/runner.go | 4 |
10 files changed, 68 insertions, 28 deletions
@@ -5,8 +5,8 @@ go 1.19 require ( github.com/fatih/color v1.13.0 github.com/jedib0t/go-pretty/v6 v6.4.0 - github.com/onsi/ginkgo/v2 v2.4.0 - github.com/onsi/gomega v1.23.0 + github.com/onsi/ginkgo/v2 v2.5.0 + github.com/onsi/gomega v1.24.0 github.com/pelletier/go-toml/v2 v2.0.5 github.com/schollz/progressbar/v3 v3.12.0 github.com/spf13/cobra v1.6.1 @@ -25,10 +25,10 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= -github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs= -github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo= -github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= -github.com/onsi/gomega v1.23.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= +github.com/onsi/ginkgo/v2 v2.5.0 h1:TRtrvv2vdQqzkwrQ1ke6vtXf7IK34RBUJafIy1wMwls= +github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= +github.com/onsi/gomega v1.24.0 h1:+0glovB9Jd6z3VR+ScSwQqXVTIfJcGA9UBM8yzQxhqg= +github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= diff --git a/golings/cmd/fixtures/info.toml b/golings/cmd/fixtures/info.toml new file mode 100644 index 0000000..a130254 --- /dev/null +++ b/golings/cmd/fixtures/info.toml @@ -0,0 +1,11 @@ +[[exercises]] +name = "compile1" +path = "compile/compile1.go" +mode = "compile" +hint = "" + +[[exercises]] +name = "test1" +path = "test/test1.go" +mode = "test" +hint = "" diff --git a/golings/cmd/hint.go b/golings/cmd/hint.go index 1cc9d60..cfa9254 100644 --- a/golings/cmd/hint.go +++ b/golings/cmd/hint.go @@ -17,7 +17,7 @@ var cmdHint = &cobra.Command{ Short: "Get a hint for an exercise", Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs), Run: func(cmd *cobra.Command, args []string) { - exercise, err := exercises.Find(args[0]) + exercise, err := exercises.Find(args[0], "info.toml") if err != nil { color.Red(err.Error()) os.Exit(1) diff --git a/golings/cmd/list.go b/golings/cmd/list.go index 53669c7..8a2855d 100644 --- a/golings/cmd/list.go +++ b/golings/cmd/list.go @@ -10,18 +10,20 @@ import ( ) func init() { - rootCmd.AddCommand(cmdList) + rootCmd.AddCommand(ListCmd("info.toml")) } -var cmdList = &cobra.Command{ - Use: "list", - Short: "List all exercises", - Run: func(cmd *cobra.Command, args []string) { - exs, err := exercises.List() - if err != nil { - color.Red(err.Error()) - os.Exit(1) - } - ui.PrintList(os.Stdout, exs) - }, +func ListCmd(infoFile string) *cobra.Command { + return &cobra.Command{ + Use: "list", + Short: "List all exercises", + Run: func(cmd *cobra.Command, args []string) { + exs, err := exercises.List(infoFile) + if err != nil { + color.Red(err.Error()) + os.Exit(1) + } + ui.PrintList(os.Stdout, exs) + }, + } } diff --git a/golings/cmd/list_suite_test.go b/golings/cmd/list_suite_test.go new file mode 100644 index 0000000..cfff5a8 --- /dev/null +++ b/golings/cmd/list_suite_test.go @@ -0,0 +1,27 @@ +package cmd_test + +import ( + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + "github.com/mauricioabreu/golings/golings/cmd" +) + +func TestList(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "List Suite") +} + +var _ = Describe("List", func() { + Context("List exercises", func() { + It("returns a list of exercises", func() { + list := cmd.ListCmd("fixtures/info.toml") + + err := list.Execute() + + Expect(err).To(BeNil()) + }) + }) +}) diff --git a/golings/cmd/run.go b/golings/cmd/run.go index ad61793..752bb44 100644 --- a/golings/cmd/run.go +++ b/golings/cmd/run.go @@ -17,7 +17,7 @@ var cmdRun = &cobra.Command{ Short: "Run a single exercise", Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs), Run: func(cmd *cobra.Command, args []string) { - result, err := exercises.Run(args[0]) + result, err := exercises.Run(args[0], "info.toml") if err != nil { color.Cyan("Failed to compile the exercise %s\n\n", result.Exercise.Path) color.White("Check the output below: \n\n") diff --git a/golings/cmd/verify.go b/golings/cmd/verify.go index 9f8d415..b8c0176 100644 --- a/golings/cmd/verify.go +++ b/golings/cmd/verify.go @@ -18,7 +18,7 @@ var cmdVerify = &cobra.Command{ Use: "verify", Short: "Verify all exercises", Run: func(cmd *cobra.Command, args []string) { - exs, err := exercises.List() + exs, err := exercises.List("info.toml") if err != nil { color.Red(err.Error()) os.Exit(1) @@ -43,7 +43,7 @@ var cmdVerify = &cobra.Command{ for _, e := range exs { bar.Describe(fmt.Sprintf("Running %s", e.Name)) - result, _ := exercises.Run(e.Name) + result, _ := exercises.Run(e.Name, "info.toml") bar.Add(1) if result.Err != "" { fmt.Print("\n\n") diff --git a/golings/exercises/list.go b/golings/exercises/list.go index c0c7261..31ebdd4 100644 --- a/golings/exercises/list.go +++ b/golings/exercises/list.go @@ -13,10 +13,10 @@ type Info struct { Exercises []Exercise } -func List() ([]Exercise, error) { +func List(infoFile string) ([]Exercise, error) { var info Info - data, err := os.ReadFile("info.toml") + data, err := os.ReadFile(infoFile) if err != nil { return info.Exercises, err } @@ -28,8 +28,8 @@ func List() ([]Exercise, error) { return info.Exercises, nil } -func Find(exercise string) (Exercise, error) { - exs, err := List() +func Find(exercise string, infoFile string) (Exercise, error) { + exs, err := List(infoFile) if err != nil { return Exercise{}, err } diff --git a/golings/exercises/runner.go b/golings/exercises/runner.go index 63ae6d3..5db1a48 100644 --- a/golings/exercises/runner.go +++ b/golings/exercises/runner.go @@ -12,8 +12,8 @@ type Result struct { Err string } -func Run(name string) (Result, error) { - exercise, err := Find(name) +func Run(name string, infoFile string) (Result, error) { + exercise, err := Find(name, infoFile) if err != nil { return Result{}, err } |