otroci = { "Adam": ["Matjaž", "Cilka", "Daniel", "Erik"], "Aleksander": [], "Alenka": [], "Barbara": [], "Cilka": [], "Daniel": ["Elizabeta", "Hans"], "Erik": [], "Elizabeta": ["Ludvik", "Jurij", "Barbara", "Herman", "Mihael"], "Franc": [], "Herman": ["Margareta"], "Hans": [], "Jožef": ["Alenka", "Aleksander", "Petra"], "Jurij": ["Franc", "Jožef"], "Ludvik": [], "Margareta": [], "Matjaž": ["Viljem"], "Mihael": [], "Petra": [], "Tadeja": [], "Viljem": ["Tadeja"], } starost = { "Adam": 111, "Matjaž": 90, "Cilka": 88, "Daniel": 85, "Erik": 83, "Viljem": 58, "Tadeja": 20, "Elizabeta": 68, "Hans": 64, "Ludvik": 50, "Jurij": 49, "Barbara": 45, "Herman": 39, "Mihael": 32, "Franc": 30, "Jožef": 29, "Margareta": 3, "Alenka": 9, "Aleksander": 5, "Petra": 7} import unittest import os import zipfile import time from contextlib import contextmanager class TestGovorice(unittest.TestCase): @classmethod def setUpClass(cls): base, ext = os.path.splitext(os.path.basename(__file__)) zf = zipfile.ZipFile(__file__ + ".zip", "a", zipfile.ZIP_DEFLATED) zf.write(__file__, "{}.{}{}".format(base, int(time.time()), ext)) zf.close() @contextmanager def postavi_starost(self, oseba, lazna): prava = starost[oseba] starost[oseba] = lazna try: yield finally: starost[oseba] = prava def test_preveri_otroke(self): self.assertTrue(preveri_otroke("Adam")) self.assertTrue(preveri_otroke("Matjaž")) self.assertTrue(preveri_otroke("Daniel")) self.assertTrue(preveri_otroke("Elizabeta")) self.assertTrue(preveri_otroke("Tadeja")) star = self.postavi_starost with star("Adam", 89): self.assertFalse(preveri_otroke("Adam")) with star("Adam", 86): self.assertFalse(preveri_otroke("Adam")) with star("Adam", 1): self.assertFalse(preveri_otroke("Adam")) with star("Matjaž", 50): self.assertFalse(preveri_otroke("Matjaž")) with star("Daniel", 65): self.assertFalse(preveri_otroke("Daniel")) with star("Daniel", 63): self.assertFalse(preveri_otroke("Daniel")) with star("Tadeja", 1): self.assertTrue(preveri_otroke("Tadeja")) def test_preveri_rodbino(self): self.assertTrue(preveri_rodbino("Adam")) self.assertTrue(preveri_rodbino("Matjaž")) self.assertTrue(preveri_rodbino("Daniel")) self.assertTrue(preveri_rodbino("Elizabeta")) self.assertTrue(preveri_rodbino("Tadeja")) # Spodnji testi so narejeni tako, da si izmislijo starost določene # osebe. Tako, na primer, with(star("Adam", 89)) povzroči, da bo # znotraj stavka "with" Adam star 89 let. Kako to deluje ... naj te # ne vznemirja. star = self.postavi_starost with star("Adam", 89): self.assertFalse(preveri_rodbino("Adam")) self.assertTrue(preveri_rodbino("Matjaž")) self.assertTrue(preveri_rodbino("Cilka")) self.assertTrue(preveri_rodbino("Daniel")) self.assertTrue(preveri_rodbino("Erik")) self.assertTrue(preveri_rodbino("Elizabeta")) with star("Adam", 86): self.assertFalse(preveri_rodbino("Adam")) self.assertTrue(preveri_rodbino("Matjaž")) self.assertTrue(preveri_rodbino("Cilka")) self.assertTrue(preveri_rodbino("Daniel")) self.assertTrue(preveri_rodbino("Erik")) self.assertTrue(preveri_rodbino("Elizabeta")) with star("Adam", 1): self.assertFalse(preveri_rodbino("Adam")) self.assertTrue(preveri_rodbino("Matjaž")) self.assertTrue(preveri_rodbino("Cilka")) self.assertTrue(preveri_rodbino("Daniel")) self.assertTrue(preveri_rodbino("Erik")) self.assertTrue(preveri_rodbino("Elizabeta")) with star("Matjaž", 50): self.assertFalse(preveri_rodbino("Adam")) self.assertFalse(preveri_rodbino("Matjaž")) self.assertTrue(preveri_rodbino("Viljem")) self.assertTrue(preveri_rodbino("Cilka")) self.assertTrue(preveri_rodbino("Daniel")) with star("Daniel", 65): self.assertFalse(preveri_rodbino("Daniel")) self.assertFalse(preveri_rodbino("Adam")) self.assertTrue(preveri_rodbino("Matjaž")) self.assertTrue(preveri_rodbino("Viljem")) self.assertTrue(preveri_rodbino("Cilka")) with star("Jurij", 25): self.assertFalse(preveri_rodbino("Adam")) self.assertFalse(preveri_rodbino("Daniel")) self.assertFalse(preveri_rodbino("Elizabeta")) self.assertFalse(preveri_rodbino("Jurij")) self.assertTrue(preveri_rodbino("Jožef")) self.assertTrue(preveri_rodbino("Alenka")) self.assertTrue(preveri_rodbino("Margareta")) self.assertTrue(preveri_rodbino("Hans")) self.assertTrue(preveri_rodbino("Matjaž")) def test_skupni_prednik(self): self.assertEqual(skupni_prednik("Adam", "Alenka", "Mihael"), "Elizabeta") self.assertEqual(skupni_prednik("Adam", "Franc", "Hans"), "Daniel") self.assertEqual(skupni_prednik("Adam", "Matjaž", "Cilka"), "Adam") self.assertEqual(skupni_prednik("Adam", "Matjaž", "Viljem"), "Matjaž") self.assertEqual(skupni_prednik("Adam", "Hans", "Viljem"), "Adam") self.assertEqual(skupni_prednik("Adam", "Ludvik", "Erik"), "Adam") self.assertEqual(skupni_prednik("Adam", "Ludvik", "Adam"), "Adam") self.assertEqual(skupni_prednik("Adam", "Ludvik", "Ludvik"), "Ludvik") self.assertEqual(skupni_prednik("Adam", "Tadeja", "Viljem"), "Viljem")