--
-- 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