aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--go.mod4
-rw-r--r--go.sum8
-rw-r--r--golings/cmd/fixtures/info.toml11
-rw-r--r--golings/cmd/hint.go2
-rw-r--r--golings/cmd/list.go26
-rw-r--r--golings/cmd/list_suite_test.go27
-rw-r--r--golings/cmd/run.go2
-rw-r--r--golings/cmd/verify.go4
-rw-r--r--golings/exercises/list.go8
-rw-r--r--golings/exercises/runner.go4
10 files changed, 68 insertions, 28 deletions
diff --git a/go.mod b/go.mod
index b0a4539..8eb942f 100644
--- a/go.mod
+++ b/go.mod
@@ -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
diff --git a/go.sum b/go.sum
index 9d0a773..34fa4e5 100644
--- a/go.sum
+++ b/go.sum
@@ -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
}