package main

import (
	"errors"
	"strconv"
	"testing"
)

// HarusSama membandingkan got dengan want dan melaporkan kegagalan
// pada baris pemanggil helper, bukan pada baris di dalam helper.
func HarusSama(t *testing.T, got, want int) {
	t.Helper()
	if got != want {
		t.Errorf("got %d; want %d", got, want)
	}
}

// HarusError memeriksa bahwa err tidak nil dan galatnya cocok dengan
// target menurut errors.Is.
func HarusError(t *testing.T, err, target error) {
	t.Helper()
	if err == nil {
		t.Fatalf("got nil; want %v", target)
	}
	if !errors.Is(err, target) {
		t.Errorf("got %v; want %v", err, target)
	}
}

func TestParseMenit(t *testing.T) {
	got, err := ParseMenit("90")
	if err != nil {
		t.Fatalf("ParseMenit(\"90\") galat tak terduga: %v", err)
	}
	HarusSama(t, got, 90)
}

func TestParseMenitBukanAngka(t *testing.T) {
	_, err := ParseMenit("sembilan")
	HarusError(t, err, strconv.ErrSyntax)
}

func TestParseMenitNegatif(t *testing.T) {
	_, err := ParseMenit("-5")
	HarusError(t, err, ErrNegatif)
}

// TestUrutanPembersihan memperlihatkan urutan t.Cleanup: yang
// didaftarkan terakhir dijalankan lebih dulu (LIFO).
func TestUrutanPembersihan(t *testing.T) {
	t.Log("awal test")
	t.Cleanup(func() { t.Log("pembersihan pertama") })
	t.Log("tengah test")
	t.Cleanup(func() { t.Log("pembersihan kedua") })
	t.Cleanup(func() { t.Log("pembersihan ketiga") })
	t.Log("akhir test")
}
