Commit 90fb9874 authored by Boris Mühmer (ADESTIS)'s avatar Boris Mühmer (ADESTIS) 💬
Browse files

implemented Greeting

parent caf9ce23
Loading
Loading
Loading
Loading

greeter.go

0 → 100644
+44 −0
Original line number Diff line number Diff line
package greeter

import (
	"fmt"
	"strings"
)

const defaultNameText = "World"

func defaultName(name string) string {
	if name == "" {
		return defaultNameText
	}

	return name
}

// Greeting returns a greeting message
func Greeting(name ...string) string {
	var names strings.Builder

	count := len(name)
	switch count {
	case 0:
		names.WriteString(defaultName(""))
	case 1:
		names.WriteString(defaultName(name[0]))
	default:
		for i, v := range name {
			if i > 0 {
				names.WriteString(", ")
			}

			if i == count-1 {
				names.WriteString("and ")
			}

			names.WriteString(defaultName(v))
		}

	}

	return fmt.Sprintf("Hello, %s!", names.String())
}

greeter_test.go

0 → 100644
+21 −0
Original line number Diff line number Diff line
package greeter

import "testing"

func TestGreeter(t *testing.T) {
	for ti, tc := range []struct {
		name     []string
		expected string
	}{
		{name: []string{}, expected: "Hello, World!"},
		{name: []string{""}, expected: "Hello, World!"},
		{name: []string{"Tester"}, expected: "Hello, Tester!"},
		{name: []string{"A", "B"}, expected: "Hello, A, and B!"},
		{name: []string{"A", "B", "C"}, expected: "Hello, A, B, and C!"},
		{name: []string{"A", "", "C"}, expected: "Hello, A, World, and C!"},
	} {
		if tr := Greeting(tc.name...); tr != tc.expected {
			t.Errorf("[% 2d] Greeting(%v) is %q, but got %q", ti, tc.name, tr, tc.expected)
		}
	}
}