Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
#5532: Unit tests covering the fragment map parser
  • Loading branch information
codereader committed Feb 28, 2021
1 parent a1fff5e commit fca61e1
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 0 deletions.
39 changes: 39 additions & 0 deletions test/Materials.cpp
Expand Up @@ -5,6 +5,7 @@
#include "string/split.h"
#include "string/case_conv.h"
#include "string/trim.h"
#include "string/join.h"

namespace test
{
Expand Down Expand Up @@ -403,4 +404,42 @@ TEST_F(MaterialsTest, MaterialParserStageVertexProgram)
EXPECT_TRUE(material->getAllLayers().empty()); // failure to parse should end up with an empty material
}

TEST_F(MaterialsTest, MaterialParserStageFragmentProgram)
{
auto material = GlobalMaterialManager().getMaterialForName("textures/parsertest/program/fragmentProgram1");

EXPECT_EQ(material->getAllLayers().front()->getFragmentProgram(), "glprogs/test.vfp");
EXPECT_EQ(material->getAllLayers().front()->getNumFragmentMaps(), 3);
EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(0).index, 0);
EXPECT_EQ(string::join(material->getAllLayers().front()->getFragmentMap(0).options, " "), "cubeMap forceHighQuality alphaZeroClamp");
EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(0).map->getExpressionString(), "env/gen1");

EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(1).index, 1);
EXPECT_EQ(string::join(material->getAllLayers().front()->getFragmentMap(1).options, " "), "");
EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(1).map->getExpressionString(), "temp/texture");

EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(2).index, 2);
EXPECT_EQ(string::join(material->getAllLayers().front()->getFragmentMap(2).options, " "), "cubemap cameracubemap nearest linear clamp noclamp zeroclamp alphazeroclamp forcehighquality uncompressed highquality nopicmip");
EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(2).map->getExpressionString(), "temp/optionsftw");

material = GlobalMaterialManager().getMaterialForName("textures/parsertest/program/fragmentProgram2");

EXPECT_EQ(material->getAllLayers().front()->getFragmentProgram(), "glprogs/test.vfp");
EXPECT_EQ(material->getAllLayers().front()->getNumFragmentMaps(), 3);
EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(0).index, 0);
EXPECT_EQ(string::join(material->getAllLayers().front()->getFragmentMap(0).options, " "), "");
EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(0).map->getExpressionString(), "env/gen1");

EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(1).index, -1); // is missing
EXPECT_EQ(string::join(material->getAllLayers().front()->getFragmentMap(1).options, " "), "");
EXPECT_FALSE(material->getAllLayers().front()->getFragmentMap(1).map);

EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(2).index, 2);
EXPECT_EQ(string::join(material->getAllLayers().front()->getFragmentMap(2).options, " "), "");
EXPECT_EQ(material->getAllLayers().front()->getFragmentMap(2).map->getExpressionString(), "temp/texture");

material = GlobalMaterialManager().getMaterialForName("textures/parsertest/program/fragmentProgram3");
EXPECT_TRUE(material->getAllLayers().empty()); // failure to parse should end up with an empty material
}

}
33 changes: 33 additions & 0 deletions test/resources/tdm/materials/parsertest.mtr
Expand Up @@ -256,3 +256,36 @@ textures/parsertest/program/vertexProgram7
vertexParm 5 5,6,7,8
}
}

textures/parsertest/program/fragmentProgram1
{
{
fragmentProgram glprogs/test.vfp

fragmentMap 0 cubeMap forceHighQuality alphaZeroClamp env/gen1 // some options
fragmentMap 1 temp/texture
// all possible options
fragmentMap 2 cubemap cameracubemap nearest linear clamp noclamp zeroclamp alphazeroclamp forcehighquality uncompressed highquality nopicmip temp/optionsftw
}
}

textures/parsertest/program/fragmentProgram2
{
{
fragmentProgram glprogs/test.vfp

fragmentMap 0 env/gen1 // no options
// fragment map 1 is missing
fragmentMap 2 temp/texture
}
}

textures/parsertest/program/fragmentProgram3
{
{
fragmentProgram glprogs/test.vfp

// defining a fragment map with num >= 8 is invalid
fragmentMap 8 temp/texture
}
}

0 comments on commit fca61e1

Please sign in to comment.