-- -- tests/test_vs200x_vcproj.lua -- Automated test suite for Visual Studio 2002-2008 C/C++ project generation. -- Copyright (c) 2009 Jason Perkins and the Premake project -- T.vs200x_vcproj = { } local suite = T.vs200x_vcproj local vc200x = premake.vstudio.vc200x -- -- Configure a solution for testing -- local sln, prj function suite.setup() _ACTION = "vs2005" sln = solution "MySolution" configurations { "Debug", "Release" } platforms {} project "DotNetProject" -- to test handling of .NET platform in solution language "C#" kind "ConsoleApp" prj = project "MyProject" language "C++" kind "ConsoleApp" uuid "AE61726D-187C-E440-BD07-2556188A6565" end local function prepare() premake.bake.buildconfigs() sln.vstudio_configs = premake.vstudio.buildconfigs(sln) local cfg = premake.getconfig(sln.projects[2]) cfg.name = prj.name cfg.blocks = prj.blocks prj = cfg end -- -- Make sure I've got the basic layout correct -- function suite.BasicLayout() prepare() vc200x.generate(prj) test.capture [[ ]] end -- -- Test multiple platforms -- function suite.Platforms_OnMultiplePlatforms() platforms { "x32", "x64" } prepare() vc200x.generate(prj) local result = io.endcapture() test.istrue(result:find ' ]] end -- -- Test Xbox360 handling -- function suite.PlatformsList_OnXbox360() platforms { "Native", "Xbox360" } prepare() vc200x.Platforms(prj) test.capture [[ ]] end function suite.CompilerBlock_OnXbox360() platforms { "Xbox360" } prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug", "Xbox360")) test.capture [[ ]] end -- -- Test PS3 handling -- function suite.PlatformsList_OnPS3() platforms { "Native", "PS3" } prepare() vc200x.Platforms(prj) test.capture [[ ]] end function suite.CompilerBlock_OnPS3() platforms { "PS3" } flags { "Symbols" } includedirs { "include/pkg1", "include/pkg2" } defines { "DEFINE1", "DEFINE2" } prepare() vc200x.VCCLCompilerTool_PS3(premake.getconfig(prj, "Debug", "PS3")) test.capture [[ ]] end function suite.LinkerBlock_OnPS3ConsoleApp() platforms { "PS3" } prepare() vc200x.VCLinkerTool_PS3(premake.getconfig(prj, "Debug", "PS3")) test.capture [[ ]] end function suite.LinkerBlock_OnPS3StaticLib() platforms { "PS3" } kind "StaticLib" prepare() vc200x.VCLinkerTool_PS3(premake.getconfig(prj, "Debug", "PS3")) test.capture [[ ]] end function suite.LinkerBlock_OnPS3SharedLink() platforms { "PS3" } links { "MyLibrary" } project "MyLibrary" language "C++" kind "SharedLib" prepare() vc200x.VCLinkerTool_PS3(premake.getconfig(prj, "Debug", "PS3")) test.capture [[ ]] end -- -- Test manifest file handling. -- function suite.VCManifestTool_OnNoManifests() files { "hello.c", "goodbye.c" } prepare() vc200x.VCManifestTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end function suite.VCManifestTool_OnNoManifests() files { "hello.c", "project1.manifest", "goodbye.c", "project2.manifest" } prepare() vc200x.VCManifestTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end -- -- Test precompiled header handling -- function suite.CompilerBlock_OnPCH() pchheader "source/common.h" pchsource "source/common.cpp" prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end -- -- Floating point flag tests -- function suite.CompilerBlock_OnFpFast() flags { "FloatFast" } prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end function suite.CompilerBlock_OnFpStrict() flags { "FloatStrict" } prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end -- -- PDB file naming tests -- function suite.CompilerBlock_OnTargetName() targetname "foob" prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end -- -- Compilation option tests -- function suite.CompilerBlock_OnNoMinimalRebuild() flags { "Symbols", "NoMinimalRebuild" } prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end -- -- RuntimeLibrary tests -- function suite.CompilerBlock_RuntimeLibrary_IsDebug_OnSymbolsNoOptimize() flags { "Symbols" } prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end function suite.CompilerBlock_RuntimeLibrary_IsRelease_OnOptimize() flags { "Symbols", "Optimize" } prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end -- -- C language support -- function suite.CompilerBlock_RuntimeLibrary_IsDebug_OnSymbolsNoOptimize() language "C" flags { "Symbols" } prepare() vc200x.VCCLCompilerTool(premake.getconfig(prj, "Debug")) test.capture [[ ]] end function suite.noLinkIncrementalFlag_valueEqualsOne() flags { "NoIncrementalLink" } prepare() vc200x.VCLinkerTool(premake.getconfig(prj, "Debug")) local result = io.endcapture() test.string_contains(result,'LinkIncremental="1"') end function suite.staticLib_platformX64_MachineX64SetInAdditionalOptions() local sln1 = solution "sol" configurations { "foo" } platforms {'x64'} local prj1 = project "prj" language 'C++' kind 'StaticLib' premake.bake.buildconfigs() sln1.vstudio_configs = premake.vstudio.buildconfigs(sln1) prj1= premake.getconfig(sln1.projects[1]) vc200x.generate(prj1) local result = io.endcapture() test.string_contains(result,'AdditionalOptions="/MACHINE:X64"') end function suite.staticLib_platformX32_MachineX86SetInAdditionalOptions() local sln1 = solution "sol" configurations { "foo" } platforms {'x32'} local prj1 = project "prj" language 'C++' kind 'StaticLib' premake.bake.buildconfigs() sln1.vstudio_configs = premake.vstudio.buildconfigs(sln1) prj1= premake.getconfig(sln1.projects[1]) vc200x.generate(prj1) local result = io.endcapture() test.string_contains(result,'AdditionalOptions="/MACHINE:X86"') end