test: added test suite for validating Pominal
This commit is contained in:
parent
4c38bfb828
commit
1d79a4c7e6
4 changed files with 107 additions and 9 deletions
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
var pominalTestCases = []struct {
|
var newPominalTestCases = []struct {
|
||||||
name string
|
name string
|
||||||
description string
|
description string
|
||||||
workSession float64
|
workSession float64
|
||||||
|
@ -104,3 +104,47 @@ var pominalTestCases = []struct {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var sessionsTestCases = []struct {
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
expectedWorkSession int
|
||||||
|
expectedCycle int
|
||||||
|
expectedLabel string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "Test session 1",
|
||||||
|
description: "When the first work session has started.",
|
||||||
|
expectedWorkSession: 1,
|
||||||
|
expectedCycle: 1,
|
||||||
|
expectedLabel: workTimerLabel,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Test session 2",
|
||||||
|
description: "When the first work session has finished and the short break session has started.",
|
||||||
|
expectedWorkSession: 1,
|
||||||
|
expectedCycle: 1,
|
||||||
|
expectedLabel: shortBreakTimerLabel,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Test session 3",
|
||||||
|
description: "When the short break session has finished and the second work session has started.",
|
||||||
|
expectedWorkSession: 2,
|
||||||
|
expectedCycle: 1,
|
||||||
|
expectedLabel: workTimerLabel,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Test session 4",
|
||||||
|
description: "When the second work session has finished and the long break has started because the maximum number of work sessions is reached.",
|
||||||
|
expectedWorkSession: 2,
|
||||||
|
expectedCycle: 1,
|
||||||
|
expectedLabel: longBreakTimerLabel,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Test session 5",
|
||||||
|
description: "When the long break session has finished and the new work session has started for the next Pominal cycle.",
|
||||||
|
expectedWorkSession: 1,
|
||||||
|
expectedCycle: 2,
|
||||||
|
expectedLabel: workTimerLabel,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
6
main.go
6
main.go
|
@ -27,12 +27,6 @@ import (
|
||||||
"github.com/rivo/tview"
|
"github.com/rivo/tview"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
workTimerLabel string = "Work"
|
|
||||||
shortBreakTimerLabel string = "Short break"
|
|
||||||
longBreakTimerLabel string = "Long break"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
workTime string
|
workTime string
|
||||||
shortBreakTime string
|
shortBreakTime string
|
||||||
|
|
|
@ -24,6 +24,12 @@ import (
|
||||||
"github.com/rivo/tview"
|
"github.com/rivo/tview"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
workTimerLabel string = "Work"
|
||||||
|
shortBreakTimerLabel string = "Short break"
|
||||||
|
longBreakTimerLabel string = "Long break"
|
||||||
|
)
|
||||||
|
|
||||||
type Pominal struct {
|
type Pominal struct {
|
||||||
// workSession is a counter for work sessions.
|
// workSession is a counter for work sessions.
|
||||||
workSession int
|
workSession int
|
||||||
|
|
|
@ -21,6 +21,9 @@ package main
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/rivo/tview"
|
||||||
)
|
)
|
||||||
|
|
||||||
const success = "\u2713"
|
const success = "\u2713"
|
||||||
|
@ -29,9 +32,9 @@ const failure = "\u2717"
|
||||||
// TestNewPominal validates the factory function for generating new
|
// TestNewPominal validates the factory function for generating new
|
||||||
// Pominal values
|
// Pominal values
|
||||||
func TestNewPominal(t *testing.T) {
|
func TestNewPominal(t *testing.T) {
|
||||||
t.Log("Given the need to test creating a new value of type Pominal.")
|
t.Log("Given the need to test the creation of a new Pominal instance.")
|
||||||
{
|
{
|
||||||
for _, p := range pominalTestCases {
|
for _, p := range newPominalTestCases {
|
||||||
testFunc := func(t *testing.T) {
|
testFunc := func(t *testing.T) {
|
||||||
t.Log(p.description)
|
t.Log(p.description)
|
||||||
res := NewPominal(
|
res := NewPominal(
|
||||||
|
@ -50,3 +53,54 @@ func TestNewPominal(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestRun validates the Pominal runtime. This test creates a new
|
||||||
|
// Pominal instance and executes the runtime in a separate goroutine.
|
||||||
|
// To ease testing the work, short break and long break timers are equal.
|
||||||
|
// Before the sub-tests are run there is a second delay to allow the
|
||||||
|
// runtime to initialise. The test then checks that the correct
|
||||||
|
// session label, work session number and pominal cycle number
|
||||||
|
// are set for each session. This test runs for exactly one
|
||||||
|
// pominal cycle.
|
||||||
|
func TestRun(t *testing.T) {
|
||||||
|
pominal := NewPominal(60, 60, 60, 2)
|
||||||
|
defer pominal.Stop()
|
||||||
|
|
||||||
|
// create the most basic text view for the info and timer
|
||||||
|
// views since we are not testing the user interface.
|
||||||
|
infoUI := tview.NewTextView()
|
||||||
|
timerUI := tview.NewTextView()
|
||||||
|
|
||||||
|
// TODO: Remove when support for disabling desktop notifications is in place.
|
||||||
|
initNotifier()
|
||||||
|
|
||||||
|
go pominal.Run(infoUI, timerUI)
|
||||||
|
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
|
||||||
|
t.Log("Given the need to test the Pominal runtime execution.")
|
||||||
|
{
|
||||||
|
for _, s := range sessionsTestCases {
|
||||||
|
testFunc := func(t *testing.T) {
|
||||||
|
t.Log(s.description)
|
||||||
|
if pominal.workSession != s.expectedWorkSession {
|
||||||
|
t.Errorf("%s\tUnexpected work session integer returned: expected %d, got %d", failure, s.expectedWorkSession, pominal.workSession)
|
||||||
|
} else {
|
||||||
|
t.Logf("%s\tExpected work session integer returned.", success)
|
||||||
|
}
|
||||||
|
if pominal.cycle != s.expectedCycle {
|
||||||
|
t.Errorf("%s\tUnexpected pominal cycle integer returned: expected %d, got %d", failure, s.expectedCycle, pominal.cycle)
|
||||||
|
} else {
|
||||||
|
t.Logf("%s\tExpected pominal cycle integer returned.", success)
|
||||||
|
}
|
||||||
|
if pominal.label != s.expectedLabel {
|
||||||
|
t.Errorf("%s\tUnexpected session label returned: expected %s, got %s", failure, s.expectedLabel, pominal.label)
|
||||||
|
} else {
|
||||||
|
t.Logf("%s\tExpected session label returned.", success)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.Run(s.name, testFunc)
|
||||||
|
time.Sleep(65 * time.Second)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue