feat: add greet program and tests
This commit is contained in:
parent
7178cfa188
commit
611da8f3e3
5 changed files with 131 additions and 1 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
greet
|
31
README.md
31
README.md
|
@ -1,3 +1,32 @@
|
||||||
# Greetings
|
# 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
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module forge.dananglin.me.uk/code/dananglin/greet
|
||||||
|
|
||||||
|
go 1.17
|
31
greet.go
Normal file
31
greet.go
Normal 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
66
greet_test.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue