summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbpc2003 <wpesfriendnva@gmail.com>2025-05-24 11:12:13 -0400
committerbpc2003 <wpesfriendnva@gmail.com>2025-05-24 11:12:13 -0400
commitf8d0e88585226138b7b17e5f74105dd4abe63559 (patch)
treed4fa028cf322a04c39dabaa61d615ea48599dda3
parent9dc1258ec342636e68b787cd3024dfbeb8a4955a (diff)
Get started on cmds module
-rw-r--r--cmds/cmds.go53
-rw-r--r--cmds/cmds_test.go58
2 files changed, 111 insertions, 0 deletions
diff --git a/cmds/cmds.go b/cmds/cmds.go
new file mode 100644
index 0000000..f61f2b8
--- /dev/null
+++ b/cmds/cmds.go
@@ -0,0 +1,53 @@
+package cmds
+
+import (
+ "errors"
+ "os"
+ "strings"
+)
+
+func Eval(cmd string) error {
+ args := strings.Split(cmd, " ")
+ switch args[0] {
+ case "cd":
+ if err := chDir(args); err != nil {
+ return err
+ }
+ break
+ case "export":
+ if err := export(args); err != nil {
+ return err
+ }
+ break
+ case "unset":
+ if len(args) == 1 || len(args) >= 3{
+ return errors.New("unset: usage: name")
+ }
+ os.Unsetenv(args[1])
+ break
+ case ":":
+ return nil
+ }
+ return nil
+}
+
+func chDir(args []string) error {
+ var dir string
+ if len(args) == 1 {
+ dir, _ = os.UserHomeDir()
+ } else {
+ dir = args[1]
+ }
+ return os.Chdir(dir)
+}
+
+func export(args []string) error {
+ if len(args) == 1 || len(args) >= 3 {
+ return errors.New("export: usage: name=value")
+ }
+ tmp := strings.Split(args[1], "=")
+ if len(tmp) != 2 {
+ return errors.New("export: usage: name=value")
+ }
+ return os.Setenv(tmp[0], tmp[1])
+}
diff --git a/cmds/cmds_test.go b/cmds/cmds_test.go
new file mode 100644
index 0000000..d59093a
--- /dev/null
+++ b/cmds/cmds_test.go
@@ -0,0 +1,58 @@
+package cmds
+
+import (
+ "os"
+ "testing"
+)
+
+func TestCd(t *testing.T) {
+ Eval("cd /tmp")
+ d, _ := os.Getwd()
+
+ if d != "/tmp" {
+ t.Errorf("Expected %q, got %q\n", "/tmp", d)
+ }
+}
+
+func TestCdFail(t *testing.T) {
+ c, _ := os.Getwd()
+ err := Eval("cd /root")
+ t.Logf("%v\n", err)
+
+ d, _ := os.Getwd()
+ if c != d || err == nil {
+ t.Errorf("Expected %q, got %q\n", c, d)
+ }
+}
+
+func TestExport(t *testing.T) {
+ err := Eval("export TEST=true")
+ test := os.Getenv("TEST")
+
+ if err != nil {
+ t.Errorf("%v\n", err)
+ }
+ if test != "true" {
+ t.Errorf("Expected %q, got %q\n", "true", test)
+ }
+}
+
+func TestExportFail(t *testing.T) {
+ err := Eval("export TEST = 123")
+ if err == nil {
+ t.Errorf("Didn't get error\n")
+ }
+ t.Logf("%v\n", err)
+}
+
+func TestUnset(t *testing.T) {
+ err := Eval("unset TEST")
+ test := os.Getenv("TEST")
+
+ if err != nil {
+ t.Logf("%v\n", err)
+ }
+ if test != "" {
+ t.Errorf("Expected empty string, got %q\n", test)
+ }
+}