import unittest
from exercises import spamify, Swallow, EuropeanSwallow

class TestSpamify(unittest.TestCase):
    def testSpamify(self): 
        # Test for the null list
	self.failUnless( spamify([]) == [])
        # Test for a singleton list
        self.failUnless( spamify(['eggs']) == ['spam', 'eggs'] )
        # Test for a longer list
	self.failUnless( 
	    spamify(['eggs', 'bacon', 'spam', 'bacon cheddar cheeseburger'])\
	    == ['spam', 'eggs', 'spam', 'bacon', 'spam', 'spam', 'spam', \
	        'bacon cheddar cheeseburger'])

class TestSwallow(unittest.TestCase):
    def setUp(self):
        self.swallow = Swallow()

    def tearDown(self):
        pass

    def testGetCurrentSpeed(self):
        self.swallow.setMaxSpeed(100)
	self.swallow.setBurden(0.25)
	self.failUnless(self.swallow.getCurrentSpeed() == 75)

    def testGetCurrentSpeedWithLargeBurden(self):
        self.swallow.setMaxSpeed(100)
	self.swallow.setBurden(1)
	assert self.swallow.getCurrentSpeed() == 0

    def testGetCurrentSpeedWithReallyLargeBurden(self):
        self.swallow.setMaxSpeed(100)
	self.swallow.setBurden(1.1)
	assert self.swallow.getCurrentSpeed() == 0


class TestEuropeanSwallow(unittest.TestCase):
    def setUp(self):
        self.swallow = EuropeanSwallow()

    def tearDown(self):
        pass

    def testInitialization(self):
        self.failUnless(self.swallow.getCurrentSpeed() == 24)

    def testSpeedLimit(self):
        # Attempting to set the swallow's speed to > 24 should 
	# raise a ValueError exception.
	self.failUnlessRaises(ValueError, self.swallow.setMaxSpeed, 25)

