from worlds.alttp.ItemPool import difficulties from test.TestBase import TestBase base_items = 41 extra_counts = (15, 15, 10, 5, 25) class TestDifficulty(TestBase): pass def build_difficulty_test(difficulty): # binds difficulty to definition local scope def build_for(function): def wrapped(self, *args): return function(self, difficulty, *args) return wrapped return build_for def build_dynamic_tests(): for name, difficulty in difficulties.items(): @build_difficulty_test(difficulty) def test_dyn_difficulty(self, difficulty): base = len(difficulty.baseitems) self.assertEqual(base, base_items) setattr(TestDifficulty, f"testCountBase{name}", test_dyn_difficulty) @build_difficulty_test(difficulty) def test_dyn_difficulty(self, difficulty): self.assertEqual(len(extra_counts), len(difficulty.extras)) setattr(TestDifficulty, f"testCountExtra{name}", test_dyn_difficulty) @build_difficulty_test(difficulty) def test_dyn_difficulty(self, difficulty): for i, extras in enumerate(extra_counts): self.assertEqual(extras, len(difficulty.extras[i])) setattr(TestDifficulty, f"testCountExtras{name}", test_dyn_difficulty) build_dynamic_tests()