d95cd28337
- Added unit tests for linking decorators
267 lines
5.4 KiB
Lua
Executable File
267 lines
5.4 KiB
Lua
Executable File
--
|
|
-- tests/config/test_links.lua
|
|
-- Test the list of linked objects retrieval function.
|
|
-- Copyright (c) 2012-2013 Jason Perkins and the Premake project
|
|
--
|
|
|
|
local p = premake
|
|
local suite = test.declare("config_links")
|
|
local config = p.config
|
|
|
|
|
|
--
|
|
-- Setup and teardown
|
|
--
|
|
|
|
local wks, prj
|
|
|
|
function suite.setup()
|
|
p.action.set("test")
|
|
_TARGET_OS = "windows"
|
|
wks, prj = test.createWorkspace()
|
|
end
|
|
|
|
local function prepare(kind, part, linkage)
|
|
cfg = test.getconfig(prj, "Debug")
|
|
return config.getlinks(cfg, kind, part, linkage)
|
|
end
|
|
|
|
|
|
--
|
|
-- If no links are present, should return an empty table.
|
|
--
|
|
|
|
function suite.emptyResult_onNoLinks()
|
|
local r = prepare("all", "object")
|
|
test.isequal(0, #r)
|
|
end
|
|
|
|
|
|
--
|
|
-- System libraries which include path information are made project relative.
|
|
--
|
|
|
|
function suite.pathMadeRelative_onSystemLibWithPath()
|
|
location "build"
|
|
links { "../libs/z" }
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "../../libs/z" }, r)
|
|
end
|
|
|
|
|
|
|
|
--
|
|
-- Handle the case where the library extension has been explicitly
|
|
-- included in the link statement.
|
|
--
|
|
|
|
function suite.skipsExtension_onExplicitExtension()
|
|
system "windows"
|
|
links { "user32.lib" }
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "user32.lib" }, r)
|
|
end
|
|
|
|
|
|
--
|
|
-- Check handling of shell variables in library paths.
|
|
--
|
|
|
|
function suite.variableMaintained_onLeadingVariable()
|
|
system "windows"
|
|
location "build"
|
|
links { "$(LOCAL_DEV_PATH)/sdk/lib/DEVMAPI" }
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "$(LOCAL_DEV_PATH)/sdk/lib/DEVMAPI" }, r)
|
|
end
|
|
|
|
function suite.variableMaintained_onQuotedVariable()
|
|
system "windows"
|
|
location "build"
|
|
links { '"$(LOCAL_DEV_PATH)/sdk/lib/DEVMAPI.lib"' }
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ '"$(LOCAL_DEV_PATH)/sdk/lib/DEVMAPI.lib"' }, r)
|
|
end
|
|
|
|
|
|
--
|
|
-- If fetching directories, the libdirs should be included in the result.
|
|
--
|
|
|
|
function suite.includesLibDirs_onDirectories()
|
|
libdirs { "../libs" }
|
|
local r = prepare("all", "directory")
|
|
test.isequal({ "../libs" }, r)
|
|
end
|
|
|
|
|
|
--
|
|
-- Managed C++ projects should ignore links to managed assemblies, which
|
|
-- are designated with an explicit ".dll" extension.
|
|
--
|
|
|
|
function suite.skipsAssemblies_onManagedCpp()
|
|
system "windows"
|
|
clr "On"
|
|
links { "user32", "System.dll" }
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "user32" }, r)
|
|
end
|
|
|
|
|
|
--
|
|
-- When explicitly requesting managed links, any unmanaged items in the
|
|
-- list should be ignored.
|
|
--
|
|
|
|
function suite.skipsUnmanagedLibs_onManagedLinkage()
|
|
system "windows"
|
|
clr "On"
|
|
links { "user32", "System.dll" }
|
|
local r = prepare("all", "fullpath", "managed")
|
|
test.isequal({ "System.dll" }, r)
|
|
end
|
|
|
|
|
|
--
|
|
-- Managed projects can link to other managed projects, and unmanaged
|
|
-- projects can link to unmanaged projects.
|
|
--
|
|
|
|
function suite.canLink_CppAndCpp()
|
|
links { "MyProject2" }
|
|
|
|
project "MyProject2"
|
|
kind "StaticLib"
|
|
language "C++"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "bin/Debug/MyProject2.lib" }, r)
|
|
end
|
|
|
|
function suite.canLink_CsAndCs()
|
|
language "C#"
|
|
links { "MyProject2" }
|
|
|
|
project "MyProject2"
|
|
kind "SharedLib"
|
|
language "C#"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "bin/Debug/MyProject2.dll" }, r)
|
|
end
|
|
|
|
function suite.canLink_ManagedCppAndManagedCpp()
|
|
clr "On"
|
|
links { "MyProject2" }
|
|
|
|
project "MyProject2"
|
|
kind "StaticLib"
|
|
language "C++"
|
|
clr "On"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "bin/Debug/MyProject2.lib" }, r)
|
|
end
|
|
|
|
function suite.canLink_ManagedCppAndCs()
|
|
clr "On"
|
|
links { "MyProject2" }
|
|
|
|
project "MyProject2"
|
|
kind "SharedLib"
|
|
language "C#"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "bin/Debug/MyProject2.dll" }, r)
|
|
end
|
|
|
|
|
|
--
|
|
-- Managed and unmanaged projects can not link to each other.
|
|
--
|
|
|
|
|
|
function suite.ignoreLink_CppAndCs()
|
|
links { "MyProject2" }
|
|
|
|
project "MyProject2"
|
|
kind "SharedLib"
|
|
language "C#"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({}, r)
|
|
end
|
|
|
|
|
|
--
|
|
-- Mixed and unmanaged projects can link to each other.
|
|
--
|
|
|
|
|
|
function suite.canLink_MixedAndNativeCpp()
|
|
clr "On"
|
|
links { "MyProject2" }
|
|
|
|
project "MyProject2"
|
|
kind "SharedLib"
|
|
language "C++"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "bin/Debug/MyProject2.lib" }, r)
|
|
end
|
|
|
|
function suite.canLink_NativeAndMixedCpp()
|
|
links { "MyProject2" }
|
|
|
|
project "MyProject2"
|
|
kind "SharedLib"
|
|
language "C++"
|
|
clr "On"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "bin/Debug/MyProject2.lib" }, r)
|
|
end
|
|
|
|
--
|
|
-- Linking decorators need to be passed through
|
|
--
|
|
|
|
function suite.canLink_StaticDecoratorSystemLib()
|
|
links { "SystemLibrary:static" }
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "SystemLibrary:static" }, r)
|
|
end
|
|
|
|
function suite.canLink_SharedDecoratorSystemLib()
|
|
links { "SystemLibrary:shared" }
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "SystemLibrary:shared" }, r)
|
|
end
|
|
|
|
--
|
|
-- Linking decorators need to be stripped for sibling projects
|
|
--
|
|
|
|
function suite.canLink_StaticDecoratorSiblingLib()
|
|
links { "SiblingLibrary:static" }
|
|
|
|
project "SiblingLibrary"
|
|
kind "StaticLib"
|
|
language "C++"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "bin/Debug/SiblingLibrary.lib" }, r)
|
|
end
|
|
|
|
function suite.canLink_SharedDecoratorSiblingLib()
|
|
links { "SiblingLibrary:shared" }
|
|
|
|
project "SiblingLibrary"
|
|
kind "SharedLib"
|
|
language "C++"
|
|
|
|
local r = prepare("all", "fullpath")
|
|
test.isequal({ "bin/Debug/SiblingLibrary.lib" }, r)
|
|
end
|