diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..714a853 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +greet diff --git a/README.md b/README.md index 9fe9299..c38d6c1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,32 @@ # Greetings -Greetings is a simple Go program that greets you. \ No newline at end of file +## Summary + +Greet is a simple Go CLI application that greets a recipient. +This is a simple project used for the purpose of testing upcoming automation, +such as CI/CD integration and dependency management, which will be used by other projects +hosted in Code Flow. + +## Requirements + +- [Go](https://go.dev/) + +## Build + +``` +$ go build -o greet . +``` + +## Run + +Greet the world. +``` +$ ./greet +Hello, World! +``` + +Greet a person. +``` +$ ./greet Bob +Hello, Bob! +``` diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b269a74 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module forge.dananglin.me.uk/code/dananglin/greet + +go 1.17 diff --git a/greet.go b/greet.go new file mode 100644 index 0000000..21bdfc6 --- /dev/null +++ b/greet.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "os" + "io" +) + +func main() { + osArgs := os.Args[1:] + + if err := greet(os.Stdout, osArgs); err != nil { + fmt.Printf("ERROR: %s.\n", err) + } +} + +func greet(w io.Writer, n []string) error { + var name string + + if len(n) > 1 { + return fmt.Errorf("unexpected number of arguments passed to the greeter: want 0 or 1 argument, got %d", len(n)) + } else if len(n) == 0 { + name = "World" + } else { + name = n[0] + } + + fmt.Fprintf(w, "Hello, %s!\n", name) + + return nil +} diff --git a/greet_test.go b/greet_test.go new file mode 100644 index 0000000..a5a7761 --- /dev/null +++ b/greet_test.go @@ -0,0 +1,66 @@ +package main + +import ( + "bytes" + "testing" +) + +// TestGreetNoArguments tests the greeter's response when given no names. +func TestGreetNoArguments(t *testing.T) { + buffer := new(bytes.Buffer) + args := make([]string, 0) + + if err := greet(buffer, args); err != nil { + t.Fatalf("an error occured while running greet(): %s", err) + } + + want := "Hello, World!\n" + got := buffer.String() + + if want != got { + t.Errorf("unexpected output returned from greet(): want '%s', got '%s'", want, got) + } else { + t.Logf("expected output returned from greet(): got '%s'", got) + } +} + +// TestGreetOneArgument tests the greeter's response when given one name. +func TestGreetOneArgument(t *testing.T) { + buffer := new(bytes.Buffer) + args := []string{"Sarah"} + + if err := greet(buffer, args); err != nil { + t.Fatalf("an error occured while running greet(): %s", err) + } + + want := "Hello, Sarah!\n" + got := buffer.String() + + if want != got { + t.Errorf("unexpected output returned from greet(): want '%s', got '%s'", want, got) + } else { + t.Logf("expected output returned from greet(): got '%s'", got) + } +} + +// TestGreetTwoArguments tests the greeter's response when given two names. +func TestGreetTwoArguments(t *testing.T) { + buffer := new(bytes.Buffer) + args := []string{"Bob", "John"} + + want := "unexpected number of arguments passed to the greeter: want 0 or 1 argument, got 2" + + err := greet(buffer, args) + + if err == nil { + t.Error("unexpected nil error returned.") + } + + got := err.Error() + + if want != got { + t.Errorf("unexpected error message returned: want '%s', got '%s'", want, got) + } else { + t.Logf("expected error message returned: got '%s'", got) + } +}