--
-- tests/test_targets.lua
-- Automated test suite for premake.gettarget()
-- Copyright (c) 2008, 2009 Jason Perkins and the Premake project
--

	T.targets = { }

	local cfg
	function T.targets.setup()
		cfg = { }
		cfg.basedir    = "."
		cfg.location   = "."
		cfg.targetdir  = "../bin"
		cfg.language   = "C++"
		cfg.project    = { name = "MyProject" }
		cfg.flags      = { }
		cfg.objectsdir = "obj"
		cfg.platform   = "Native"
	end


--
--  Path Style   Name Style    Example Environment
--  ----------   ----------    -------------------
--   windows      windows       VStudio with MSC
--   posix        posix         GMake with GCC
--   windows      posix         VStudio for PS3
--   posix        windows       GMake for .NET
--




--
-- ConsoleApp tests
--

	function T.targets.ConsoleApp_Build_WindowsNames()
		cfg.kind = "ConsoleApp"
		result = premake.gettarget(cfg, "build", "posix", "windows", "macosx")
		test.isequal([[../bin/MyProject.exe]], result.fullpath)
	end

	function T.targets.ConsoleApp_Build_PosixNames_OnWindows()
		cfg.kind = "ConsoleApp"
		result = premake.gettarget(cfg, "build", "posix", "posix", "windows")
		test.isequal([[../bin/MyProject.exe]], result.fullpath)
	end

	function T.targets.ConsoleApp_Build_PosixNames_OnLinux()
		cfg.kind = "ConsoleApp"
		result = premake.gettarget(cfg, "build", "posix", "posix", "linux")
		test.isequal([[../bin/MyProject]], result.fullpath)
	end

	function T.targets.ConsoleApp_Build_PosixNames_OnMacOSX()
		cfg.kind = "ConsoleApp"
		result = premake.gettarget(cfg, "build", "posix", "posix", "macosx")
		test.isequal([[../bin/MyProject]], result.fullpath)
	end

	function T.targets.ConsoleApp_Build_PS3Names()
		cfg.kind = "ConsoleApp"
		result = premake.gettarget(cfg, "build", "posix", "PS3", "macosx")
		test.isequal([[../bin/MyProject.elf]], result.fullpath)
	end



--
-- WindowedApp tests
--

	function T.targets.WindowedApp_Build_WindowsNames()
		cfg.kind = "WindowedApp"
		result = premake.gettarget(cfg, "build", "posix", "windows", "macosx")
		test.isequal([[../bin/MyProject.exe]], result.fullpath)
	end

	function T.targets.WindowedApp_Build_PosixNames_OnWindows()
		cfg.kind = "WindowedApp"
		result = premake.gettarget(cfg, "build", "posix", "posix", "windows")
		test.isequal([[../bin/MyProject.exe]], result.fullpath)
	end

	function T.targets.WindowedApp_Build_PosixNames_OnLinux()
		cfg.kind = "WindowedApp"
		result = premake.gettarget(cfg, "build", "posix", "posix", "linux")
		test.isequal([[../bin/MyProject]], result.fullpath)
	end

	function T.targets.WindowedApp_Build_PosixNames_OnMacOSX()
		cfg.kind = "WindowedApp"
		result = premake.gettarget(cfg, "build", "posix", "posix", "macosx")
		test.isequal([[../bin/MyProject.app/Contents/MacOS/MyProject]], result.fullpath)
	end

	function T.targets.WindowedApp_Build_PS3Names()
		cfg.kind = "WindowedApp"
		result = premake.gettarget(cfg, "build", "posix", "PS3", "macosx")
		test.isequal([[../bin/MyProject.elf]], result.fullpath)
	end


--
-- SharedLib tests
--

	function T.targets.SharedLib_Build_WindowsNames()
		cfg.kind = "SharedLib"
		result = premake.gettarget(cfg, "build", "posix", "windows", "macosx")
		test.isequal([[../bin/MyProject.dll]], result.fullpath)
	end

	function T.targets.SharedLib_Link_WindowsNames()
		cfg.kind = "SharedLib"
		result = premake.gettarget(cfg, "link", "posix", "windows", "macosx")
		test.isequal([[../bin/MyProject.lib]], result.fullpath)
	end

	function T.targets.SharedLib_Build_PosixNames_OnWindows()
		cfg.kind = "SharedLib"
		result = premake.gettarget(cfg, "build", "posix", "posix", "windows")
		test.isequal([[../bin/MyProject.dll]], result.fullpath)
	end

	function T.targets.SharedLib_Link_PosixNames_OnWindows()
		cfg.kind = "SharedLib"
		result = premake.gettarget(cfg, "link", "posix", "posix", "windows")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.SharedLib_Build_PosixNames_OnLinux()
		cfg.kind = "SharedLib"
		result = premake.gettarget(cfg, "build", "posix", "posix", "linux")
		test.isequal([[../bin/libMyProject.so]], result.fullpath)
	end

	function T.targets.SharedLib_Link_PosixNames_OnLinux()
		cfg.kind = "SharedLib"
		result = premake.gettarget(cfg, "link", "posix", "posix", "linux")
		test.isequal([[../bin/libMyProject.so]], result.fullpath)
	end

	function T.targets.SharedLib_Build_PosixNames_OnMacOSX()
		cfg.kind = "SharedLib"
		result = premake.gettarget(cfg, "build", "posix", "posix", "macosx")
		test.isequal([[../bin/libMyProject.dylib]], result.fullpath)
	end

	function T.targets.SharedLib_Link_PosixNames_OnMacOSX()
		cfg.kind = "SharedLib"
		result = premake.gettarget(cfg, "link", "posix", "posix", "macosx")
		test.isequal([[../bin/libMyProject.dylib]], result.fullpath)
	end


--
-- Bundle tests
--

	function T.targets.Bundle_Build_WindowsNames()
		cfg.kind = "Bundle"
		result = premake.gettarget(cfg, "build", "posix", "windows", "macosx")
		test.isequal([[../bin/MyProject.dll]], result.fullpath)
	end

	function T.targets.Bundle_Link_WindowsNames()
		cfg.kind = "Bundle"
		result = premake.gettarget(cfg, "link", "posix", "windows", "macosx")
		test.isequal([[../bin/MyProject.lib]], result.fullpath)
	end

	function T.targets.Bundle_Build_PosixNames_OnWindows()
		cfg.kind = "Bundle"
		result = premake.gettarget(cfg, "build", "posix", "posix", "windows")
		test.isequal([[../bin/MyProject.dll]], result.fullpath)
	end

	function T.targets.Bundle_Link_PosixNames_OnWindows()
		cfg.kind = "Bundle"
		result = premake.gettarget(cfg, "link", "posix", "posix", "windows")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.Bundle_Build_PosixNames_OnLinux()
		cfg.kind = "Bundle"
		result = premake.gettarget(cfg, "build", "posix", "posix", "linux")
		test.isequal([[../bin/libMyProject.so]], result.fullpath)
	end

	function T.targets.Bundle_Link_PosixNames_OnLinux()
		cfg.kind = "Bundle"
		result = premake.gettarget(cfg, "link", "posix", "posix", "linux")
		test.isequal([[../bin/libMyProject.so]], result.fullpath)
	end

	function T.targets.Bundle_Build_PosixNames_OnMacOSX()
		cfg.kind = "Bundle"
		result = premake.gettarget(cfg, "build", "posix", "posix", "macosx")
		test.isequal([[../bin/MyProject.bundle]], result.fullpath)
	end

	function T.targets.Bundle_Link_PosixNames_OnMacOSX()
		cfg.kind = "Bundle"
		result = premake.gettarget(cfg, "link", "posix", "posix", "macosx")
		test.isequal([[../bin/MyProject.bundle]], result.fullpath)
	end


--
-- StaticLib tests
--

	function T.targets.StaticLib_Build_WindowsNames()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "build", "posix", "windows", "macosx")
		test.isequal([[../bin/MyProject.lib]], result.fullpath)
	end

	function T.targets.StaticLib_Link_WindowsNames()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "link", "posix", "windows", "macosx")
		test.isequal([[../bin/MyProject.lib]], result.fullpath)
	end

	function T.targets.StaticLib_Build_PosixNames_OnWindows()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "build", "posix", "posix", "windows")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.StaticLib_Link_PosixNames_OnWindows()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "link", "posix", "posix", "windows")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.StaticLib_Build_PosixNames_OnLinux()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "build", "posix", "posix", "linux")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.StaticLib_Link_PosixNames_OnLinux()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "link", "posix", "posix", "linux")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.StaticLib_Build_PosixNames_OnMacOSX()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "build", "posix", "posix", "macosx")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.StaticLib_Link_PosixNames_OnMacOSX()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "link", "posix", "posix", "macosx")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.StaticLib_Build_PosixNames_OnPS3()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "build", "posix", "PS3", "macosx")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.StaticLib_Link_PosixNames_OnPS3()
		cfg.kind = "StaticLib"
		result = premake.gettarget(cfg, "link", "posix", "PS3", "macosx")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end

	function T.targets.StaticLib_Link_IgnoresImpLib()
		cfg.kind = "StaticLib"
		cfg.implibdir = "../lib"
		result = premake.gettarget(cfg, "link", "posix", "posix", "macosx")
		test.isequal([[../bin/libMyProject.a]], result.fullpath)
	end



--
-- Windows path tests
--

	function T.targets.WindowsPaths()
		cfg.kind = "ConsoleApp"
		result = premake.gettarget(cfg, "build", "windows", "windows", "linux")
		test.isequal([[..\bin]], result.directory)
		test.isequal([[..\bin\MyProject.exe]], result.fullpath)
	end