/*-------------------------------------------------------------------------
 * drawElements Quality Program OpenGL ES 2.0 Module
 * -------------------------------------------------
 *
 * 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 Base class for a test case.
 *//*--------------------------------------------------------------------*/

#include "es2fFunctionalTests.hpp"

#include "es2fColorClearTest.hpp"
#include "es2fLightAmountTest.hpp"
#include "es2fMultisampledRenderToTextureTests.hpp"
#include "es2fShaderExecuteTest.hpp"
#include "es2fFboApiTest.hpp"
#include "es2fFboRenderTest.hpp"
#include "es2fFboCompletenessTests.hpp"
#include "es2fRandomShaderTests.hpp"
#include "es2fPrerequisiteTests.hpp"
#include "es2fDepthTests.hpp"
#include "es2fStencilTests.hpp"
#include "es2fScissorTests.hpp"
#include "es2fVertexArrayTest.hpp"
#include "es2fRasterizationTests.hpp"
#include "es2fDepthStencilClearTests.hpp"
#include "es2fDepthStencilTests.hpp"
#include "es2fBlendTests.hpp"
#include "es2fRandomFragmentOpTests.hpp"
#include "es2fMultisampleTests.hpp"
#include "es2fUniformApiTests.hpp"
#include "es2fBufferWriteTests.hpp"
#include "es2fImplementationLimitTests.hpp"
#include "es2fDepthRangeTests.hpp"
#include "es2fDitheringTests.hpp"
#include "es2fClippingTests.hpp"
#include "es2fClipControlTests.hpp"
#include "es2fPolygonOffsetTests.hpp"
#include "es2fDrawTests.hpp"
#include "es2fFragOpInteractionTests.hpp"
#include "es2fFlushFinishTests.hpp"
#include "es2fDefaultVertexAttributeTests.hpp"
#include "es2fLifetimeTests.hpp"

#include "es2fTextureFormatTests.hpp"
#include "es2fTextureWrapTests.hpp"
#include "es2fTextureFilteringTests.hpp"
#include "es2fTextureMipmapTests.hpp"
#include "es2fTextureSizeTests.hpp"
#include "es2fTextureSpecificationTests.hpp"
#include "es2fTextureCompletenessTests.hpp"
#include "es2fNegativeVertexArrayApiTests.hpp"
#include "es2fNegativeTextureApiTests.hpp"
#include "es2fNegativeFragmentApiTests.hpp"
#include "es2fNegativeBufferApiTests.hpp"
#include "es2fNegativeShaderApiTests.hpp"
#include "es2fNegativeStateApiTests.hpp"
#include "es2fVertexTextureTests.hpp"
#include "es2fTextureUnitTests.hpp"

#include "es2fShaderApiTests.hpp"
#include "es2fShaderAlgorithmTests.hpp"
#include "es2fShaderBuiltinVarTests.hpp"
#include "es2fShaderConstExprTests.hpp"
#include "es2fShaderDiscardTests.hpp"
#include "es2fShaderIndexingTests.hpp"
#include "es2fShaderLoopTests.hpp"
#include "es2fShaderOperatorTests.hpp"
#include "es2fShaderReturnTests.hpp"
#include "es2fShaderStructTests.hpp"
#include "es2fShaderMatrixTests.hpp"
#include "es2fShaderTextureFunctionTests.hpp"
#include "es2fAttribLocationTests.hpp"
#include "es2fShaderInvarianceTests.hpp"
#include "es2fShaderFragDataTests.hpp"

// State query tests
#include "es2fBooleanStateQueryTests.hpp"
#include "es2fIntegerStateQueryTests.hpp"
#include "es2fFloatStateQueryTests.hpp"
#include "es2fTextureStateQueryTests.hpp"
#include "es2fStringQueryTests.hpp"
#include "es2fBufferObjectQueryTests.hpp"
#include "es2fFboStateQueryTests.hpp"
#include "es2fRboStateQueryTests.hpp"
#include "es2fShaderStateQueryTests.hpp"

#include "es2fReadPixelsTests.hpp"
#include "es2fDebugMarkerTests.hpp"

namespace deqp
{
namespace gles2
{
namespace Functional
{

// ShadersTestGroup

class ShadersTestGroup : public TestCaseGroup
{
public:
	ShadersTestGroup (Context& context)
		: TestCaseGroup(context, "shaders", "Shader Tests")
	{
	}

	virtual ~ShadersTestGroup (void)
	{
	}

	virtual void init (void)
	{
		addChild(new ShaderExecuteTest(m_context, "preprocessor",					"Preprocessor Tests"));
		addChild(new ShaderExecuteTest(m_context, "constants",						"Constant Literal Tests"));
		addChild(new ShaderExecuteTest(m_context, "linkage",						"Linkage Tests"));
		addChild(new ShaderExecuteTest(m_context, "conversions",					"Type Conversion Tests"));
		addChild(new ShaderExecuteTest(m_context, "conditionals",					"Conditionals Tests"));
		addChild(new ShaderExecuteTest(m_context, "declarations",					"Declarations Tests"));
		addChild(new ShaderExecuteTest(m_context, "swizzles",						"Swizzle Tests"));
		addChild(new ShaderExecuteTest(m_context, "functions",						"Function Tests"));
		addChild(new ShaderExecuteTest(m_context, "keywords",						"Keyword Tests"));
		addChild(new ShaderExecuteTest(m_context, "reserved_operators",				"Reserved Operator Tests"));
		addChild(new ShaderExecuteTest(m_context, "qualification_order",			"Order of Qualification Tests"));
		addChild(new ShaderExecuteTest(m_context, "scoping",						"Scoping of Declarations"));
		addChild(new ShaderExecuteTest(m_context, "invalid_implicit_conversions",	"Invalid Implicit Conversions"));
		addChild(new ShaderExecuteTest(m_context, "misc",							"Miscellaneous Tests"));


		addChild(new ShaderIndexingTests		(m_context));
		addChild(new ShaderLoopTests			(m_context));
		addChild(new ShaderOperatorTests		(m_context));
		addChild(new ShaderMatrixTests			(m_context));
		addChild(new ShaderReturnTests			(m_context));
		addChild(new ShaderDiscardTests			(m_context));
		addChild(new ShaderStructTests			(m_context));
		addChild(new ShaderBuiltinVarTests		(m_context));
		addChild(new ShaderTextureFunctionTests	(m_context));
		addChild(new ShaderInvarianceTests		(m_context));
		addChild(new ShaderFragDataTests		(m_context));
		addChild(new ShaderAlgorithmTests		(m_context));
		addChild(new ShaderConstExprTests		(m_context));

		addChild(new RandomShaderTests(m_context));
	}
};

// TextureTestGroup

class TextureTestGroup : public TestCaseGroup
{
public:
	TextureTestGroup (Context& context)
		: TestCaseGroup(context, "texture", "Texture Tests")
	{
	}

	virtual ~TextureTestGroup (void)
	{
	}

	virtual void init (void)
	{
		addChild(new TextureFormatTests			(m_context));
		addChild(new TextureSizeTests			(m_context));
		addChild(new TextureWrapTests			(m_context));
		addChild(new TextureFilteringTests		(m_context));
		addChild(new TextureMipmapTests			(m_context));
		addChild(new TextureSpecificationTests	(m_context));
		addChild(new TextureCompletenessTests	(m_context));
		addChild(new VertexTextureTests			(m_context));
		addChild(new TextureUnitTests			(m_context));
	}

	virtual void deinit (void)
	{
	}
};

class BufferTests : public TestCaseGroup
{
public:
	BufferTests (Context& context)
		: TestCaseGroup(context, "buffer", "Buffer object tests")
	{
	}

	void init (void)
	{
		addChild(new BufferWriteTests(m_context));
	}
};

// FboTestGroup

class FboTestGroup : public TestCaseGroup
{
public:
	FboTestGroup (Context& context)
		: TestCaseGroup(context, "fbo", "Framebuffer Object Tests")
	{
	}

	virtual ~FboTestGroup (void)
	{
	}

	virtual void init (void)
	{
		addChild(new FboApiTestGroup(m_context));
		addChild(new FboRenderTestGroup(m_context));
		addChild(createFboCompletenessTests(m_context));
	}
};

// NegativeApiTestGroup

class NegativeApiTestGroup : public TestCaseGroup
{
public:
	NegativeApiTestGroup (Context& context)
		: TestCaseGroup(context, "negative_api", "Negative API Tests")
	{
	}

	virtual ~NegativeApiTestGroup (void)
	{
	}

	virtual void init (void)
	{
		addChild(new NegativeBufferApiTests			(m_context));
		addChild(new NegativeFragmentApiTests		(m_context));
		addChild(new NegativeShaderApiTests			(m_context));
		addChild(new NegativeStateApiTests			(m_context));
		addChild(new NegativeTextureApiTests		(m_context));
		addChild(new NegativeVertexArrayApiTests	(m_context));
	}
};

// FragmentOpTests

class FragmentOpTests : public TestCaseGroup
{
public:
	FragmentOpTests (Context& context)
		: TestCaseGroup(context, "fragment_ops", "Per-Fragment Operation Tests")
	{
	}

	void init (void)
	{
		addChild(new DepthTests				(m_context));
		addChild(new StencilTests			(m_context));
		addChild(new DepthStencilTests		(m_context));
		addChild(new ScissorTests			(m_context));
		addChild(new BlendTests				(m_context));
		addChild(new RandomFragmentOpTests	(m_context));
		addChild(new FragOpInteractionTests	(m_context));
	}
};

// StateQueryTests

class StateQueryTests : public TestCaseGroup
{
public:
	StateQueryTests (Context& context)
		: TestCaseGroup(context, "state_query", "State Query Tests")
	{
	}

	void init (void)
	{
		addChild(new BooleanStateQueryTests		(m_context));
		addChild(new IntegerStateQueryTests		(m_context));
		addChild(new FloatStateQueryTests		(m_context));
		addChild(new TextureStateQueryTests		(m_context));
		addChild(new StringQueryTests			(m_context));
		addChild(new BufferObjectQueryTests		(m_context));
		addChild(new FboStateQueryTests			(m_context));
		addChild(new RboStateQueryTests			(m_context));
		addChild(new ShaderStateQueryTests		(m_context));
	}
};

// FunctionalTestGroup

FunctionalTests::FunctionalTests (Context& context)
	: TestCaseGroup(context, "functional", "Functionality Tests")
{
}

FunctionalTests::~FunctionalTests (void)
{
}

void FunctionalTests::init (void)
{
	addChild(new PrerequisiteTests					(m_context));
	addChild(new ImplementationLimitTests			(m_context));
	addChild(new ClipControlTests					(m_context));
	addChild(new ColorClearTest						(m_context));
	addChild(new DepthStencilClearTests				(m_context));
	addChild(new BufferTests						(m_context));
	addChild(new LightAmountTest					(m_context));
	addChild(new MultisampledRenderToTextureTests	(m_context));
	addChild(new ShadersTestGroup					(m_context));
	addChild(new TextureTestGroup					(m_context));
	addChild(new FragmentOpTests					(m_context));
	addChild(new FboTestGroup						(m_context));
	addChild(new VertexArrayTestGroup				(m_context));
	addChild(new ShaderApiTests						(m_context));
	addChild(new NegativeApiTestGroup				(m_context));
	addChild(new RasterizationTests					(m_context));
	addChild(createAttributeLocationTests			(m_context));
	addChild(new MultisampleTests					(m_context));
	addChild(new UniformApiTests					(m_context));
	addChild(new ReadPixelsTests					(m_context));
	addChild(new DepthRangeTests					(m_context));
	addChild(new DitheringTests						(m_context));
	addChild(new StateQueryTests					(m_context));
	addChild(new ClippingTests						(m_context));
	addChild(new PolygonOffsetTests					(m_context));
	addChild(new DrawTests							(m_context));
	addChild(new FlushFinishTests					(m_context));
	addChild(new DefaultVertexAttributeTests		(m_context));
	addChild(createLifetimeTests					(m_context));
	addChild(createDebugMarkerTests					(m_context));
}

} // Functional
} // gles2
} // deqp
