// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package tilo

import (
	"time"

	"fuchsia.googlesource.com/infra/infra/fuchsia/testexec"
	"fuchsia.googlesource.com/infra/infra/tilo/resultstore"
)

// TestStatus describes the outcome of a test.
type TestStatus = resultstore.Status

// TestStatus constants.
const (
	TestPassed = resultstore.Passed
	TestFailed = resultstore.Failed
)

// TestFinishedEvent represents the ending of some test.
type TestFinishedEvent struct {
	TestName   string
	EnvName    string
	StartTime  time.Time
	EndTime    time.Time
	LogFileURI string
	TestStatus TestStatus
}

// TestStartedEvent represents the start of some test.
type TestStartedEvent struct {
	TestName  string
	EnvName   string
	StartTime time.Time
}

// TestFoundEvent represents the discovery of a test.
type TestFoundEvent = testexec.Test

// EnvironmentFoundEvent represents the discovery of a test environment.
type EnvironmentFoundEvent = testexec.Environment
