--
-- tests/base/test_override.lua
-- Verify function override support.
-- Copyright (c) 2012 Jason Perkins and the Premake project
--


	T.premake_override = {}
	local suite = T.premake_override


--
-- Setup
--

	local X = {}

	function suite.setup()
		X.testfunc = function(value)
			return value or "testfunc"
		end
	end


--
-- Should be able to completely replace the function with one of my own.
--

	function suite.canOverride()
		premake.override(X, "testfunc", function()
			return "canOverride"
		end)
		test.isequal("canOverride", X.testfunc())
	end


--
-- Should be able to reference the original implementation.
--

	function suite.canCallOriginal()
		premake.override(X, "testfunc", function(base)
			return "canOverride > " .. base()
		end)
		test.isequal("canOverride > testfunc", X.testfunc())
	end


--
-- Arguments should pass through.
--

	function suite.canPassThroughArguments()
		premake.override(X, "testfunc", function(base, value)
			return value .. " > " .. base()
		end)
		test.isequal("testval > testfunc", X.testfunc("testval"))
	end


--
-- Can override the same function multiple times.
--

	function suite.canOverrideMultipleTimes()
		premake.override(X, "testfunc", function(base, value)
			return string.format("[%s > %s]", value, base("base1"))
		end)

		premake.override(X, "testfunc", function(base, value)
			return string.format("{%s > %s}", value, base("base2"))
		end)

		test.isequal("{base3 > [base2 > base1]}", X.testfunc("base3"))
	end
