#ifndef _TCUTESTSESSIONEXECUTOR_HPP
#define _TCUTESTSESSIONEXECUTOR_HPP
/*-------------------------------------------------------------------------
 * drawElements Quality Program Tester Core
 * ----------------------------------------
 *
 * Copyright 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *//*!
 * \file
 * \brief Test executor.
 *//*--------------------------------------------------------------------*/

#include "tcuDefs.hpp"
#include "tcuTestContext.hpp"
#include "tcuTestCase.hpp"
#include "tcuTestPackage.hpp"
#include "tcuTestHierarchyIterator.hpp"
#include "deUniquePtr.hpp"
#include <map>

namespace tcu
{

class TestSessionExecutor
{
public:
									TestSessionExecutor	(TestPackageRoot& root, TestContext& testCtx);
									~TestSessionExecutor(void);

	bool							iterate						(void);

	bool							isInTestCase				(void) const { return m_isInTestCase;	}
	const TestRunStatus&			getStatus					(void) const { return m_status;			}

private:
	void							enterTestPackage			(TestPackage* testPackage);
	void							leaveTestPackage			(TestPackage* testPackage);

	void							enterTestGroup				(const std::string& casePath);
	void							leaveTestGroup				(const std::string& casePath);

	bool							enterTestCase				(TestCase* testCase, const std::string& casePath);
	TestCase::IterateResult			iterateTestCase				(TestCase* testCase);
	void							leaveTestCase				(TestCase* testCase, const std::string& casePath);

	enum State
	{
		STATE_TRAVERSE_HIERARCHY = 0,
		STATE_EXECUTE_TEST_CASE,

		STATE_LAST
	};

	TestContext&					m_testCtx;

	DefaultHierarchyInflater		m_inflater;
	de::MovePtr<CaseListFilter>		m_caseListFilter;
	TestHierarchyIterator			m_iterator;

	de::MovePtr<TestCaseExecutor>	m_caseExecutor;
	TestRunStatus					m_status;
	State							m_state;
	bool							m_abortSession;
	bool							m_isInTestCase;
	deUint64						m_testStartTime;
	deUint64						m_packageStartTime;
	std::map<std::string, deUint64>	m_groupsDurationTime;
};

} // tcu

#endif // _TCUTESTSESSIONEXECUTOR_HPP
