Welcome to mirror list, hosted at ThFree Co, Russian Federation.

testfx.lua « tests - github.com/windirstat/premake-4.x-stable.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c7097e2a7870ef6616cb4e605a48652f51d6a178 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
--
-- tests/testfx.lua
-- Automated test framework for Premake.
-- Copyright (c) 2008 Jason Perkins and the Premake project
--


--
-- Define a namespace for the testing functions
--

	test = { }
	

--
-- 
	
--
-- Assertion functions
--
	
	function test.capture(expected)
		local actual = io.endcapture()

		local ait = actual:gfind("(.-)" .. io.eol)
		local eit = expected:gfind("(.-)\n")
		
		local linenum = 1
		local atxt = ait()
		local etxt = eit()
		while etxt do
			if (etxt ~= atxt) then
				test.fail("(%d) expected:\n%s\n...but was:\n%s", linenum, etxt, atxt)
			end
			linenum = linenum + 1
			atxt = ait()
			etxt = eit()
		end
	end
	

	function test.contains(value, expected)
		if not table.contains(value, expected) then
			test.fail("expected value %s not found", expected)
		end
	end
	
		
	function test.fail(format, ...)
		-- convert nils into something more usefuls
		for i = 1, arg.n do
			if (arg[i] == nil) then 
				arg[i] = "(nil)"
			elseif (type(arg[i]) == "table") then
				arg[i] = "{" .. table.concat(arg[i], ", ") .. "}"
			end
		end
		error(string.format(format, unpack(arg)), 3)
	end
		
	
	function test.filecontains(expected, fn)
		local f = io.open(fn)
		local actual = f:read("*a")
		f:close()
		if (expected ~= actual) then
			test.fail("expected %s but was %s", expected, actual)
		end
	end
	
	
	function test.isequal(expected, actual)
		if (type(expected) == "table") then
			for k,v in pairs(expected) do
				if (expected[k] ~= actual[k]) then
					test.fail("expected %s but was %s", expected, actual)
				end
			end
		else
			if (expected ~= actual) then
				test.fail("expected %s but was %s", expected, actual)
			end
		end
	end
	
		
	function test.isfalse(value)
		if (value) then
			test.fail("expected false but was true")
		end
	end

	
	function test.isnil(value)
		if (value ~= nil) then
			test.fail("expected nil but was " .. tostring(value))
		end
	end
	
	
	function test.istrue(value)
		if (not value) then
			test.fail("expected true but was false")
		end
	end


	function test.success(fn, ...)
		local ok, err = pcall(fn, unpack(arg))
		if not ok then
			test.fail("call failed: " .. err)
		end
	end
	

--
-- Define a collection for the test suites
--

	T = { }



--
-- Test execution function
--

	function test.runall()		
		local numpassed = 0
		local numfailed = 0
	
		-- HACK: reset the important global state. I'd love to find a
		-- way to do this automatically; maybe later.
		local function resetglobals()
			_ACTION = "test"
			_ARGS = { }
			_OPTIONS = { }
			_SOLUTIONS = { }
		end
		
		for suitename,suitetests in pairs(T) do
			for testname, testfunc in pairs(suitetests) do
				local setup = suitetests.setup
				local teardown = suitetests.teardown
				local ok = true
				
				resetglobals()
				if (setup) then
					ok, err = pcall(setup)
				end
				if (ok) then
					ok, err = pcall(testfunc)
				end
				if (ok and teardown) then
					ok, err = pcall(teardown)
				end
				
				if (not ok) then
					print(string.format("%s.%s: %s", suitename, testname, err))
					numfailed = numfailed + 1
				else
					numpassed = numpassed + 1
				end

			end
		end

		return numpassed, numfailed 
	end