import pyfmi.testcase import unittest points = 5 class ProblemTests(pyfmi.testcase.SpeakingTestCase): songs = [ ('Man In A Box', 'Alice In Chains', ('famous', 'power')), ('Frogs', 'Alice In Chains', ('sad',)), ('Right Turn', 'Alice In Chains', ('cornell',)), ('Hunger Strike', 'Temple of the Dog', ('vedder',)), ('Reach Down', 'Temple of the Dog', ()), ('Long Gone Day', 'Mad Season', ('saxophone', 'lanegan')), ('November Hotel', 'Mad Season', ('power',)), ('Nearly Lost You', 'Screaming Trees', ()), ('Indifference', 'Pearl Jam', ('sad',)), ('Thursday', 'Morphine', ('power',)), ('Outshined', 'Soundgarden', ()), ('Have a Cigar', 'Pink Floyd', ('saxophone',)), ('Time', 'Pink Floyd', ()), ('Fear of the Dark', 'Iron Maiden', ('heavy metal', 'masterpiece')), ] bands = [ ('Alice In Chains', ('staley', 'grunge')), ('Temple of the Dog', ('grunge', 'cornell')), ('Pearl Jam', ('vedder', 'grunge')), ('Screaming Trees', ('lanegan', 'grunge')), ('Morphine', ('low rock', 'saxophone')), ('Pink Floyd', ('psychadelic',)), ('Soundgarden', ('grunge', 'cornell')), ('Mad Season', ('grunge', 'staley')), ('Iron Maiden', ('metal', 'heavy metal')), ] def assertNoOrder(self, first, second): self.assertEqual(set(first), set(second)) def test_empties(self): tags_by_band, songs_by_tags, songs_by_band = self.user.build(self.songs, self.bands) self.assertNoOrder([], tags_by_band('My Jolly Band')) self.assertNoOrder([], songs_by_tags('staley', 'cornell', 'vedder')) self.assertNoOrder([], songs_by_band('My Jolly Band')) def test_tags_by_band(self): tags_by_band = self.user.build(self.songs, self.bands)[0] self.assertNoOrder("grunge cornell".split(), tags_by_band('Soundgarden')) self.assertNoOrder("vedder grunge sad".split(), tags_by_band('Pearl Jam')) self.assertNoOrder("lanegan grunge".split(), tags_by_band('Screaming Trees')) self.assertNoOrder("saxophone psychadelic".split(), tags_by_band('Pink Floyd')) self.assertNoOrder("grunge staley power saxophone lanegan".split(), tags_by_band('Mad Season')) self.assertNoOrder(['metal', 'heavy metal', 'masterpiece'], tags_by_band('Iron Maiden')) def test_songs_by_tags(self): songs_by_tags = self.user.build(self.songs, self.bands)[1] self.assertNoOrder([('November Hotel', 'Mad Season'), ('Man In A Box', 'Alice In Chains'), ('Thursday', 'Morphine')], songs_by_tags('power')) self.assertNoOrder([('Right Turn', 'Alice In Chains')], songs_by_tags('cornell', 'staley')) self.assertNoOrder([('Reach Down', 'Temple of the Dog'), ('Right Turn', 'Alice In Chains'), ('Outshined', 'Soundgarden'), ('Hunger Strike', 'Temple of the Dog')], songs_by_tags('cornell', 'grunge')) self.assertNoOrder([('Hunger Strike', 'Temple of the Dog')], songs_by_tags('cornell', 'grunge', 'vedder')) def test_songs_by_band(self): songs_by_band = self.user.build(self.songs, self.bands)[2] self.assertNoOrder(['Frogs', 'Man In A Box', 'Right Turn'], songs_by_band('Alice In Chains')) self.assertNoOrder(['Have a Cigar', 'Time'], songs_by_band('Pink Floyd')) self.assertNoOrder(['Thursday'], songs_by_band('Morphine')) def test_globals(self): songs = [("Mother's Knee Is Far Away", 'My Jolly Band', ('nostalgic', 'cry'))] bands = [('My Jolly Band', ('40s',))] tags_by_band, songs_by_tags, songs_by_band = self.user.build(self.songs, self.bands) local_tags_by_band, local_songs_by_tags, local_songs_by_band = self.user.build(songs, bands) self.assertNoOrder("grunge cornell".split(), tags_by_band('Soundgarden')) self.assertNoOrder([('November Hotel', 'Mad Season'), ('Man In A Box', 'Alice In Chains'), ('Thursday', 'Morphine')], songs_by_tags('power')) self.assertNoOrder(['Frogs', 'Man In A Box', 'Right Turn'], songs_by_band('Alice In Chains')) self.assertNoOrder("40s nostalgic cry".split(), local_tags_by_band('My Jolly Band')) self.assertNoOrder([("Mother's Knee Is Far Away", 'My Jolly Band')], local_songs_by_tags('cry')) self.assertNoOrder([], local_songs_by_tags('power')) self.assertNoOrder(["Mother's Knee Is Far Away"], local_songs_by_band('My Jolly Band')) self.assertNoOrder([], local_songs_by_band('Soundgarden')) if __name__ == '__main__': ProblemTests.user_filename = 'p2.py' unittest.main()