package parse_hour

import (
	"testing"
)

/*
	Тест для парсера времени часов
*/

// Тестер для проверки парсера времени
type tester struct {
	t  *testing.T
	ph *ПарсерЧас
}

func TestParseHour(t *testing.T) {
	test := &tester{
		t: t,
	}
	test.create()
	test.parse()
	test.set()
	test.reset()
}

// Сброс часов в ноль
func (сам *tester) reset() {
	сам.t.Logf("=reset=\n")
	сам.ph.Сброс()
	if strHour := сам.ph.String(); strHour != "00" {
		сам.t.Errorf("setGood2(): strHour(%q)!='00'\n", strHour)
	}
}

// Устанавливает целочисленное значение часов
func (сам *tester) set() {
	сам.t.Logf("=set=\n")
	сам.setBad1()
	сам.setGood1()
}
func (сам *tester) setGood1() {
	сам.t.Logf("=setGood1=\n")
	if err := сам.ph.Уст("8"); err != nil {
		сам.t.Errorf("setGood1(): err=\n\t%v\n", err)
	}
}

// Отрицательное значение часа
func (сам *tester) setBad1() {
	сам.t.Logf("=setBad1=\n")
	if err := сам.ph.Уст("-1"); err == nil {
		сам.t.Errorf("setBad1(): err==nil\n")
	}
}

// Устанавливает значение часов
func (сам *tester) parse() {
	сам.t.Logf("=parse=\n")
	сам.parseBad1()
	сам.parseBad2()
	сам.parseGood1()
	сам.parseGood2()
}

// Установка правильных большихчасов
func (сам *tester) parseGood2() {
	сам.t.Logf("=parseGood2=\n")
	if err := сам.ph.Уст("867"); err != nil {
		сам.t.Errorf("parseGood2(): err=\n\t%v\n", err)
	}
	if strHour := сам.ph.String(); strHour != "867" {
		сам.t.Errorf("parseGood2(): strHour(%q)!='867'\n", strHour)
	}
}

// Установка правильных часов
func (сам *tester) parseGood1() {
	сам.t.Logf("=parseGood1=\n")
	if err := сам.ph.Уст("8"); err != nil {
		сам.t.Errorf("parseGood1(): err=\n\t%v\n", err)
	}
	if strHour := сам.ph.String(); strHour != "08" {
		сам.t.Errorf("parseGood1(): strHour(%q)!='08'\n", strHour)
	}
}

// Установка отрицательных часов
func (сам *tester) parseBad2() {
	сам.t.Logf("=parseBad2=\n")
	if err := сам.ph.Уст("-1"); err == nil {
		сам.t.Errorf("parseBad2(): err==nil\n")
	}
}

// Установка не часов
func (сам *tester) parseBad1() {
	сам.t.Logf("=parseBad1=\n")
	if err := сам.ph.Уст("abc"); err == nil {
		сам.t.Errorf("parseBad1(): err==nil\n")
	}
}

// Создание парсера часов
func (сам *tester) create() {
	сам.t.Logf("=create=\n")
	сам.ph = НовПарсерЧас()
	if сам.ph == nil {
		сам.t.Errorf("create(): parseHour==nil\n")
	}
	if hour := сам.ph.Получ(); hour != 0 {
		сам.t.Errorf("create(): hour(%v)!=0\n", hour)
	}
	if strHour := сам.ph.String(); strHour != "00" {
		сам.t.Errorf("create(): strHour(%q)!='00'\n", strHour)
	}
}
