class ItemSetTest(unittest.TestCase): """ Tests ItemSet class. """ INITIAL_COUNT = 3 INITIAL_WEIGHT = 4 def setUp(self): from items.item import Item from items.item_set import ItemSet sword = Item("sword", "made by elves", 2) helmet = Item("helmet", "made by men", 1) potion = Item("potion", "restores health", 1) self._itemList = [sword, helmet, potion] self._items = ItemSet([sword, helmet, potion]) def tearDown(self): self._itemList = self._items = None def testInitItemSet(self): errorMsg = "ItemSet object has more objects than it was given " \ "during initialization." self.assertEqual(len(self._items._items), ItemSetTest.INITIAL_COUNT, errorMsg) errorMsg = "ItemSet object does not include all objects given " \ "during initialization." for item in self._itemList: self.assertTrue(item in self._items._items, errorMsg) def testCountItems(self): expectedCount = ItemSetTest.INITIAL_COUNT actualCount = self._items.count() errorMsg = "Actual count and expected count different for ItemSet object." self.assertEqual(expectedCount, actualCount, errorMsg) def testAddRemoveContainsItems(self): from items.item import Item antidote = Item("antidote", "cures poison", 1) #Verify item not included in collection errorMsg = "ItemSet.containsItem() claimed to contain item not present." self.assertFalse(self._items.containsItem(antidote), errorMsg) #Add item self._items.addItem(antidote) errorMsg = "ItemSet.containsItem() failed to identify existing item." self.assertTrue(self._items.containsItem(antidote), errorMsg) #Remove item self._items.removeItem(antidote) errorMsg = "ItemSet.containsItem() claimed to contain item not present." self.assertFalse(self._items.containsItem(antidote), errorMsg) def testItemsWeight(self): from items.item import Item errorMsg = "Initial weight of ItemSet object incorrect." expectedWeight = ItemSetTest.INITIAL_WEIGHT actualWeight = self._items.weight() self.assertEqual(expectedWeight, actualWeight, errorMsg) heavyRock = Item("heavy rock", "weighs a ton", 2000) #Add item self._items.addItem(heavyRock) errorMsg = "ItemSet.weight() reported incorrect weight." expectedWeight += 2000 actualWeight = self._items.weight() self.assertEqual(expectedWeight, actualWeight, errorMsg) #Remove item self._items.removeItem(heavyRock) expectedWeight -= 2000 actualWeight = self._items.weight() self.assertEqual(expectedWeight, actualWeight, errorMsg) def testItemSetIter(self): #Verify iterator returns by ItemSet object visits the exact #collection of objects added to ItemSet #(Implicitly) use iterator in for loop for item in self._items: #Verify item returned is recognized errorMsg = "ItemSet iterator returned unrecognized object." self.assertTrue(item in self._itemList, errorMsg) #Remove item from original list of items self._itemList.remove(item) #Assert all items are accounted for errorMsg = "ItemSet object contained Item not added during initialization." self.assertEqual(len(self._itemList), 0, errorMsg)