def test_lauta(self): with patch('builtins.input', side_effect=["2"] * 100): for koko in range(3, 60): reload_module(self.module) output_alussa = get_stdout() clear_stdout() self.module.shakkilauta(koko) output_all = get_stdout().replace(output_alussa, '', 1) output = [ l for l in output_all.split("\n") if len(l.strip()) > 0 ] self.assertTrue( len(output_all) > 0, f"Funktiokutsu shakkilauta({koko}) ei tulosta mitään") acual = '\n'.join(output) self.assertEqual( koko, len(output), f"Funktiokutsun shakkilauta({koko}) pitäisi tulostaa {koko} riviä, nyt se tulosti {len(output)} riviä, tulostus oli\n{acual}" ) for i in range(koko): rivi = "10" * koko if i % 2 == 0 else "01" * koko rivi = rivi[0:koko] self.assertEqual( rivi, output[i].strip(), f"Funktiokutsun shakkilauta({koko}) rivin {i} pitäisi olla {rivi}, nyt se on\n{output[i]}\nfunktion koko tulostus oli\n{acual}" )
def test_funktio_olemassa(self): try: clear_stdout() self.module.shakkilauta(2) except: self.assertTrue( False, f"koodistasi pitäisi löytyä funktio nimeltään shakkilauta jota pystyy kutsumaan seuraavasti shakkilauta(2)" )
def test_funktio_olemassa(self): try: self.module.nelio("", 0) except: self.assertTrue(False, f'koodistasi pitäisi löytyä funktio nimeltään nelio') try: clear_stdout() self.module.nelio("ab", 2) except: self.assertTrue(False, f'Varmista että seuraava onnistuu\nnelio("ab", 3)')
def test_funktio_olemassa(self): with patch('builtins.input', side_effect=["2"] * 10): try: clear_stdout() self.module.keskiarvo(1, 2, 3) except: self.assertTrue( False, f"koodistasi pitäisi löytyä funktio nimeltään keskiarvo jota pystyy seuraavasti keskiarvo(1,2,3)" )
def test_funktio_olemassa(self): with patch('builtins.input', side_effect=[ AssertionError( "tässä tehtävässä ei odotettu syötteen lukemista") ]): try: clear_stdout() self.module.tulosta_monesti("testi", 2) except: self.assertTrue( False, f'koodistasi pitäisi löytyä funktio nimeltään tulosta_monesti jota pystyy kutsumaan seuraavasti tulosta_monesti("testi", 2)' )
def test_seitseman(self): veljekset = [ "Aapo", "Eero", "Juhani", "Lauri", "Simeoni", "Timo", "Tuomas" ] clear_stdout() self.module.seitseman_veljesta() output_all = get_stdout() output = output_all.split('\n') self.assertTrue(len(output_all)>0, f"Funktion seitseman_veljesta kutsuminen ei tulosta mitään") self.assertEqual(7, len(output), f"Funktion seitseman_veljesta kutsumisen pitäisi tulostaa 7 riviä, nyt se tulosti {len(output)} riviä, tulostus oli\n{output_all}") for i in range(7): self.assertEqual(veljekset[i], output[i].strip(), f"Funktion seitseman_veljesta kutsumisen rivin {i+1} tulostuksen pitäisi olla\n{veljekset[i]}\ntulostus oli\n{output[i]}")
def test_nelio(self): for sana, koko in [("ab", 3), ("abc", 5), ("python", 15), ('qwerty', 37), ('123456789', 100)]: with patch('builtins.input', side_effect=["2"] * 100): reload_module(self.module) output_alussa = get_stdout() clear_stdout() try: self.module.nelio(sana, koko) except: self.assertTrue(False, f'Varmista että seuraava onnistuu\nnelio("{sana}", {koko})') output_all = get_stdout().replace(output_alussa, '', 1) output = [l for l in output_all.split("\n") if len(l.strip())>0 ] rivit = textwrap.wrap(sana*(koko*koko), koko)[0:koko] self.assertTrue(len(output_all)>0, f'Funktiokutsu nelio("{sana}", {koko}) ei tulosta mitään') acual = '\n'.join(output) self.assertEqual(len(rivit), len(output), f'Funktiokutsun nelio("{sana}", {koko}) pitäisi tulostaa {koko} riviä, nyt se tulosti {len(output)} riviä, tulostus oli\n{acual}') for i in range(koko): self.assertEqual(rivit[i], output[i].strip(), f'Funktiokutsun nelio("{sana}", {koko}) rivin {i} tulostuksen pitäisi olla {rivit[i]}, nyt se on\n{output[i]}\nfunktion koko tulostus oli\n{acual}')
def test_lasku_oikein(self): for l1, l2, l3 in [(5, 3, 1), (10, 1, 1), (1, 1, 2), (-3, 7, 21), (5, 44, 21), (0, 0, 0), (-9, 22, 1021)]: with patch('builtins.input', side_effect=["2"] * 10): reload_module(self.module) output_alussa = get_stdout() clear_stdout() self.module.keskiarvo(l1, l2, l3) output_all = get_stdout().replace(output_alussa, '', 1) output = [ l for l in output_all.split("\n") if len(l.strip()) > 0 ] inpt = ', '.join(str(i) for i in [l1, l2, l3]) self.assertTrue( len(output_all) > 0, f"Funktiokutsu keskiarvo({inpt}) ei tulosta mitään") acual = '\n'.join(output) self.assertEqual( 1, len(output), f"Funktiokutsun keskiarvo({inpt}) pitäisi tulostaa vain 1 rivi, nyt se tulosti {len(output)} riviä, tulostus oli\n{acual}" ) expctd = (l1 + l2 + l3) / 3 try: was = float(acual.strip()) except: self.assertFalse( True, f"Funktiokutsun keskiarvo({inpt}) pitäisi tulostaa {expctd}, funktion tulostus\n{acual}\nei ole muutettavissa likukuluvuksi!" ) self.assertAlmostEqual( expctd, was, 2, f"Funktiokutsun keskiarvo({inpt}) pitäisi tulostaa {expctd}, nyt se tulosti\n{was}" )
def test_tulostukset_kunnossa(self): test_data = [("testi", 2), ("python", 7), ("suo kuokka ja jussi", 4), ("martti luther ja muovipussi", 12), ("koodistasi pitäisi löytyä funktio", 10), ("viimeinen testi", 20)] for mj, lkm in test_data: with patch( 'builtins.input', side_effect=[ AssertionError( "tässä tehtävässä ei odotettu syötteen lukemista") ]): reload_module(self.module) output_alussa = get_stdout() clear_stdout() self.module.tulosta_monesti(mj, lkm) output_all = get_stdout().replace(output_alussa, '', 1) output = [ l for l in output_all.split("\n") if len(l.strip()) > 0 ] self.assertTrue( len(output_all) > 0, f'Funktiokutsu monta_tulostusta("{mj}", {lkm}) ei tulosta mitään' ) acual = '\n'.join(output) self.assertEqual( lkm, len(output), f'Funktiokutsun monta_tulostusta("{mj}", {lkm}) pitäisi tulostaa {lkm} riviä, nyt se tulosti {len(output)} riviä, tulostus oli\n{acual}' ) for i in range(lkm): self.assertEqual( mj, output[i].strip(), f'Funktiokutsun monta_tulostusta("{mj}", {lkm}) jokaisen tulostusrivin pitäisi olla {mj}, seuraava rivi tulostuu väärin:\n{output[i]}\nfunktion koko tulostus oli:\n{acual}' )
def test_funktio_olemassa(self): try: clear_stdout() self.module.seitseman_veljesta() except: self.assertTrue(False, f"koodistasi pitäisi löytyä funktio nimeltään seitseman_veljesta jota pystyy kutsumaan seuraavasti:\nseitseman_veljesta()")