150 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from . import ZillionTestBase
 | |
| 
 | |
| 
 | |
| class TestGoalVanilla(ZillionTestBase):
 | |
|     options = {
 | |
|         "start_char": "JJ",
 | |
|         "jump_levels": "vanilla",
 | |
|         "gun_levels": "vanilla",
 | |
|         "floppy_disk_count": 7,
 | |
|         "floppy_req": 6,
 | |
|     }
 | |
| 
 | |
|     def test_floppies(self) -> None:
 | |
|         self.collect_by_name(["Apple", "Champ", "Red ID Card"])
 | |
|         self.assertBeatable(False)  # 0 floppies
 | |
|         floppies = self.get_items_by_name("Floppy Disk")
 | |
|         win = self.get_item_by_name("Win")
 | |
|         self.collect(floppies[:-2])  # 1 too few
 | |
|         self.assertEqual(self.count("Floppy Disk"), 5)
 | |
|         self.assertBeatable(False)
 | |
|         self.collect(floppies[-2:-1])  # exact
 | |
|         self.assertEqual(self.count("Floppy Disk"), 6)
 | |
|         self.assertBeatable(True)
 | |
|         self.remove([win])  # reset
 | |
|         self.collect(floppies[-1:])  # 1 extra
 | |
|         self.assertEqual(self.count("Floppy Disk"), 7)
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
|     def test_with_everything(self) -> None:
 | |
|         self.collect_by_name(["Apple", "Champ", "Red ID Card", "Floppy Disk"])
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
|     def test_no_jump(self) -> None:
 | |
|         self.collect_by_name(["Champ", "Red ID Card", "Floppy Disk"])
 | |
|         self.assertBeatable(False)
 | |
| 
 | |
|     def test_no_gun(self) -> None:
 | |
|         self.ensure_gun_3_requirement()
 | |
|         self.collect_by_name(["Apple", "Red ID Card", "Floppy Disk"])
 | |
|         self.assertBeatable(False)
 | |
| 
 | |
|     def test_no_red(self) -> None:
 | |
|         self.collect_by_name(["Apple", "Champ", "Floppy Disk"])
 | |
|         self.assertBeatable(False)
 | |
| 
 | |
| 
 | |
| class TestGoalBalanced(ZillionTestBase):
 | |
|     options = {
 | |
|         "start_char": "JJ",
 | |
|         "jump_levels": "balanced",
 | |
|         "gun_levels": "balanced",
 | |
|     }
 | |
| 
 | |
|     def test_jump(self) -> None:
 | |
|         self.collect_by_name(["Red ID Card", "Floppy Disk", "Zillion"])
 | |
|         self.assertBeatable(False)  # not enough jump
 | |
|         opas = self.get_items_by_name("Opa-Opa")
 | |
|         self.collect(opas[:1])  # too few
 | |
|         self.assertEqual(self.count("Opa-Opa"), 1)
 | |
|         self.assertBeatable(False)
 | |
|         self.collect(opas[1:])
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
|     def test_guns(self) -> None:
 | |
|         self.ensure_gun_3_requirement()
 | |
|         self.collect_by_name(["Red ID Card", "Floppy Disk", "Opa-Opa"])
 | |
|         self.assertBeatable(False)  # not enough gun
 | |
|         guns = self.get_items_by_name("Zillion")
 | |
|         self.collect(guns[:1])  # too few
 | |
|         self.assertEqual(self.count("Zillion"), 1)
 | |
|         self.assertBeatable(False)
 | |
|         self.collect(guns[1:])
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
| 
 | |
| class TestGoalRestrictive(ZillionTestBase):
 | |
|     options = {
 | |
|         "start_char": "JJ",
 | |
|         "jump_levels": "restrictive",
 | |
|         "gun_levels": "restrictive",
 | |
|     }
 | |
| 
 | |
|     def test_jump(self) -> None:
 | |
|         self.collect_by_name(["Champ", "Red ID Card", "Floppy Disk", "Zillion"])
 | |
|         self.assertBeatable(False)  # not enough jump
 | |
|         self.collect_by_name("Opa-Opa")
 | |
|         self.assertBeatable(False)  # with all opas, jj champ can't jump
 | |
|         self.collect_by_name("Apple")
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
|     def test_guns(self) -> None:
 | |
|         self.ensure_gun_3_requirement()
 | |
|         self.collect_by_name(["Apple", "Red ID Card", "Floppy Disk", "Opa-Opa"])
 | |
|         self.assertBeatable(False)  # not enough gun
 | |
|         self.collect_by_name("Zillion")
 | |
|         self.assertBeatable(False)  # with all guns, jj apple can't gun
 | |
|         self.collect_by_name("Champ")
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
| 
 | |
| class TestGoalAppleStart(ZillionTestBase):
 | |
|     """ creation of character rescue items has some special interactions with logic """
 | |
|     options = {
 | |
|         "start_char": "Apple",
 | |
|         "jump_levels": "balanced",
 | |
|         "gun_levels": "low",
 | |
|         "zillion_count": 5
 | |
|     }
 | |
| 
 | |
|     def test_guns_jj_first(self) -> None:
 | |
|         """ with low gun levels, 5 Zillion is enough to get JJ to gun 3 """
 | |
|         self.ensure_gun_3_requirement()
 | |
|         self.collect_by_name(["JJ", "Red ID Card", "Floppy Disk", "Opa-Opa"])
 | |
|         self.assertBeatable(False)  # not enough gun
 | |
|         self.collect_by_name("Zillion")
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
|     def test_guns_zillions_first(self) -> None:
 | |
|         """ with low gun levels, 5 Zillion is enough to get JJ to gun 3 """
 | |
|         self.ensure_gun_3_requirement()
 | |
|         self.collect_by_name(["Zillion", "Red ID Card", "Floppy Disk", "Opa-Opa"])
 | |
|         self.assertBeatable(False)  # not enough gun
 | |
|         self.collect_by_name("JJ")
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
| 
 | |
| class TestGoalChampStart(ZillionTestBase):
 | |
|     """ creation of character rescue items has some special interactions with logic """
 | |
|     options = {
 | |
|         "start_char": "Champ",
 | |
|         "jump_levels": "low",
 | |
|         "gun_levels": "balanced",
 | |
|         "opa_opa_count": 5,
 | |
|         "opas_per_level": 1
 | |
|     }
 | |
| 
 | |
|     def test_jump_jj_first(self) -> None:
 | |
|         """ with low jump levels, 5 level-ups is enough to get JJ to jump 3 """
 | |
|         self.collect_by_name(["JJ", "Red ID Card", "Floppy Disk", "Zillion"])
 | |
|         self.assertBeatable(False)  # not enough jump
 | |
|         self.collect_by_name("Opa-Opa")
 | |
|         self.assertBeatable(True)
 | |
| 
 | |
|     def test_jump_opa_first(self) -> None:
 | |
|         """ with low jump levels, 5 level-ups is enough to get JJ to jump 3 """
 | |
|         self.collect_by_name(["Opa-Opa", "Red ID Card", "Floppy Disk", "Zillion"])
 | |
|         self.assertBeatable(False)  # not enough jump
 | |
|         self.collect_by_name("JJ")
 | |
|         self.assertBeatable(True)
 | 
