diff options
author | bpc2003 <wpesfriendnva@gmail.com> | 2025-05-24 11:12:13 -0400 |
---|---|---|
committer | bpc2003 <wpesfriendnva@gmail.com> | 2025-05-24 11:12:13 -0400 |
commit | f8d0e88585226138b7b17e5f74105dd4abe63559 (patch) | |
tree | d4fa028cf322a04c39dabaa61d615ea48599dda3 | |
parent | 9dc1258ec342636e68b787cd3024dfbeb8a4955a (diff) |
Get started on cmds module
-rw-r--r-- | cmds/cmds.go | 53 | ||||
-rw-r--r-- | cmds/cmds_test.go | 58 |
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) + } +} |