--
-- tests/project/test_sources.lua
-- Automated test suite for the source tree, including tokens and wildcards.
-- Copyright (c) 2011-2013 Jason Perkins and the Premake project
--

	local suite = test.declare("project_sources")
	local project = premake.project


--
-- Setup and teardown
--

	local wks, prj

	local cwd = os.getcwd()
	local oldcwd

	function suite.setup()
		wks, prj = test.createWorkspace()

		-- We change the directory to get nice relative paths
		oldcwd = os.getcwd()
		os.chdir(cwd)

		-- Create a token to be used in search paths
		premake.api.register { name = "mytoken", kind = "string", scope = "config" }
		mytoken "test"
	end

	function suite.teardown()
		mytoken = nil
		os.chdir(oldcwd)
	end

	local function run()
		local cfg = test.getconfig(prj, "Debug")

		local files = {}
		for _, file in ipairs(cfg.files) do
			table.insert(files, path.getrelative(cwd, file))
		end

		return files
	end


--
-- Test single file
--

	function suite.SingleFile()
		files { "test_sources.lua" }
		test.isequal({"test_sources.lua"}, run())
	end

--
-- Test tokens
--

	function suite.SingleFileWithToken()
		files { "%{cfg.mytoken}_sources.lua" }
		test.isequal({"test_sources.lua"}, run())
	end

--
-- Test wildcards
--

	function suite.FilesWithWildcard()
		files { "test_*.lua" }
		test.contains("test_sources.lua", run())
	end

	function suite.FilesWithRecursiveWildcard()
		files { "../**_sources.lua" }
		test.contains("test_sources.lua", run())
	end

--
-- Test wildcards and tokens combined
--

	function suite.FilesWithWildcardAndToken()
		files { "%{cfg.mytoken}_*.lua" }
		test.contains("test_sources.lua", run())
	end

	function suite.FilesWithRecursiveWildcardAndToken()
		files { "../**/%{cfg.mytoken}_sources.lua" }
		test.contains("test_sources.lua", run())
	end