def setUp(self):
		self.eventemitter = EventEmitter()
		self._method_calls = []
class EventEmitterTest(unittest.TestCase):
	def setUp(self):
		self.eventemitter = EventEmitter()
		self._method_calls = []

	def _method(self, *args, **kwds):
		self._method_calls.append((args, kwds))

	def _exception_method(self, *args, **kwds):
		raise ValueError("error")

	def testOn(self):
		self.eventemitter.on('test', self._method)
		self.eventemitter.emit('test', "This is a test")
		self.assertEqual(self._method_calls, [(("This is a test",), {})])

	def testCallbackFailure(self):
		self.eventemitter.on('test', self._exception_method)
		self.eventemitter.emit('test', "This is a test")
		self.assertEqual(self._method_calls, [])

	def testOff(self):
		self.eventemitter.on('test', self._method)
		self.eventemitter.off('test', self._method)
		self.eventemitter.emit('test', "This is a test")
		self.assertEqual(self._method_calls, [])

	def testOnce(self):
		self.eventemitter.once('test', self._method)
		self.eventemitter.emit('test', "This is a test")
		self.assertEqual(self._method_calls, [(("This is a test",), {})])
		self.eventemitter.emit('test', "This is a test")
		self.assertEqual(self._method_calls, [(("This is a test",), {})])

	def testCLear(self):
		self.eventemitter.on('test', self._method)
		self.eventemitter.clear()
		self.eventemitter.emit('test', "This is a test")
		self.assertEqual(self._method_calls, [])