aboutsummaryrefslogtreecommitdiff
path: root/tests/events.py
blob: 83d7f2b8e1d544090dc5f112ba10bf04ce3d1bd0 (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
import time
import tests

recorded_events = [ ]

def event(self, name, args, kwargs):
	global recorded_events
	print "*EVENT*", time.time(), self, name, args, kwargs
	recorded_events.append((time.time(), self, name, args, kwargs))

def eventfnc(f):
	name = f.__name__
	def wrapper(self, *args, **kwargs):
		event(self, name, args, kwargs)
		return f(self, *args, **kwargs)
	return wrapper

def get_events():
	global recorded_events
	r = recorded_events
	recorded_events = [ ]
	return r

def start_log():
	global base_time
	base_time = time.time()

def end_log(test_name):
	global base_time
	
	results = ""
	
	for (t, self, method, args, kwargs) in get_events():
		results += "%s T+%f: %s::%s(%s, *%s, *%s)\n"  % (time.ctime(t), t - base_time, str(self.__class__), method, self, args, kwargs)

	expected = None

	try:
		f = open(test_name + ".results", "rb")
		expected = f.read()
		f.close()
	except:
		print "NO TEST RESULT FOUND, creating new"
		f = open(test_name + ".new_results", "wb")
		f.write(results)
		f.close()
	
	print expected, results
	
	if expected is not None:
		print "expected:"
		if expected != results:
			open(test_name + ".bogus_results", "wb").write(results)
			raise tests.TestError("test data does not match")
		else:
			print "test compared ok"
	else:
		print "no test data to compare with."

def log(fnc, base_time = 0, test_name = "test", *args, **kwargs):
	import fake_time
	fake_time.setTime(base_time)

	start_log()
	try:
		fnc(*args, **kwargs)
		event(None, "test_completed", [], {"test_name": test_name})
	except tests.TestError,c:
		event(None, "test_failed", [], {"test_name": test_name, "reason": str(c)})
	end_log(test_name)