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