feat: add greet program and tests

This commit is contained in:
Dan Anglin 2021-08-29 15:36:09 +01:00
parent 7178cfa188
commit 611da8f3e3
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
5 changed files with 131 additions and 1 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
greet

View file

@ -1,3 +1,32 @@
# Greetings
Greetings is a simple Go program that greets you.
## 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!
```

3
go.mod Normal file
View file

@ -0,0 +1,3 @@
module forge.dananglin.me.uk/code/dananglin/greet
go 1.17

31
greet.go Normal file
View file

@ -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
}

66
greet_test.go Normal file
View file

@ -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)
}
}