215 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			215 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from . import KH2TestBase | ||
|  | from ..Names import ItemName, LocationName | ||
|  | 
 | ||
|  | global_all_possible_forms = [ItemName.ValorForm, ItemName.WisdomForm, ItemName.LimitForm, ItemName.MasterForm, ItemName.FinalForm] + [ItemName.AutoValor, ItemName.AutoWisdom, ItemName.AutoLimit, ItemName.AutoMaster, ItemName.AutoFinal] | ||
|  | 
 | ||
|  | 
 | ||
|  | class KH2TestFormBase(KH2TestBase): | ||
|  |     allForms = [ItemName.ValorForm, ItemName.WisdomForm, ItemName.LimitForm, ItemName.MasterForm, ItemName.FinalForm] | ||
|  |     autoForms = [ItemName.AutoValor, ItemName.AutoWisdom, ItemName.AutoLimit, ItemName.AutoMaster, ItemName.AutoFinal] | ||
|  |     allLevel2 = [LocationName.Valorlvl2, LocationName.Wisdomlvl2, LocationName.Limitlvl2, LocationName.Masterlvl2, | ||
|  |                  LocationName.Finallvl2] | ||
|  |     allLevel3 = [LocationName.Valorlvl3, LocationName.Wisdomlvl3, LocationName.Limitlvl3, LocationName.Masterlvl3, | ||
|  |                  LocationName.Finallvl3] | ||
|  |     allLevel4 = [LocationName.Valorlvl4, LocationName.Wisdomlvl4, LocationName.Limitlvl4, LocationName.Masterlvl4, | ||
|  |                  LocationName.Finallvl4] | ||
|  |     allLevel5 = [LocationName.Valorlvl5, LocationName.Wisdomlvl5, LocationName.Limitlvl5, LocationName.Masterlvl5, | ||
|  |                  LocationName.Finallvl5] | ||
|  |     allLevel6 = [LocationName.Valorlvl6, LocationName.Wisdomlvl6, LocationName.Limitlvl6, LocationName.Masterlvl6, | ||
|  |                  LocationName.Finallvl6] | ||
|  |     allLevel7 = [LocationName.Valorlvl7, LocationName.Wisdomlvl7, LocationName.Limitlvl7, LocationName.Masterlvl7, | ||
|  |                  LocationName.Finallvl7] | ||
|  |     driveToAuto = { | ||
|  |         ItemName.FinalForm:  ItemName.AutoFinal, | ||
|  |         ItemName.MasterForm: ItemName.AutoMaster, | ||
|  |         ItemName.LimitForm:  ItemName.AutoLimit, | ||
|  |         ItemName.WisdomForm: ItemName.AutoWisdom, | ||
|  |         ItemName.ValorForm:  ItemName.AutoValor, | ||
|  |     } | ||
|  |     AutoToDrive = {Auto: Drive for Drive, Auto in driveToAuto.items()} | ||
|  |     driveFormMap = { | ||
|  |         ItemName.ValorForm:  [LocationName.Valorlvl2, | ||
|  |                               LocationName.Valorlvl3, | ||
|  |                               LocationName.Valorlvl4, | ||
|  |                               LocationName.Valorlvl5, | ||
|  |                               LocationName.Valorlvl6, | ||
|  |                               LocationName.Valorlvl7], | ||
|  |         ItemName.WisdomForm: [LocationName.Wisdomlvl2, | ||
|  |                               LocationName.Wisdomlvl3, | ||
|  |                               LocationName.Wisdomlvl4, | ||
|  |                               LocationName.Wisdomlvl5, | ||
|  |                               LocationName.Wisdomlvl6, | ||
|  |                               LocationName.Wisdomlvl7], | ||
|  |         ItemName.LimitForm:  [LocationName.Limitlvl2, | ||
|  |                               LocationName.Limitlvl3, | ||
|  |                               LocationName.Limitlvl4, | ||
|  |                               LocationName.Limitlvl5, | ||
|  |                               LocationName.Limitlvl6, | ||
|  |                               LocationName.Limitlvl7], | ||
|  |         ItemName.MasterForm: [LocationName.Masterlvl2, | ||
|  |                               LocationName.Masterlvl3, | ||
|  |                               LocationName.Masterlvl4, | ||
|  |                               LocationName.Masterlvl5, | ||
|  |                               LocationName.Masterlvl6, | ||
|  |                               LocationName.Masterlvl7], | ||
|  |         ItemName.FinalForm:  [LocationName.Finallvl2, | ||
|  |                               LocationName.Finallvl3, | ||
|  |                               LocationName.Finallvl4, | ||
|  |                               LocationName.Finallvl5, | ||
|  |                               LocationName.Finallvl6, | ||
|  |                               LocationName.Finallvl7], | ||
|  |     } | ||
|  |     # global_all_possible_forms = allForms + autoForms | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestDefaultForms(KH2TestFormBase): | ||
|  |     """
 | ||
|  |     Test default form access rules. | ||
|  |     """
 | ||
|  |     options = { | ||
|  |         "AutoFormLogic":  False, | ||
|  |         "FinalFormLogic": "light_and_darkness" | ||
|  |     } | ||
|  | 
 | ||
|  |     def test_default_Auto_Form_Logic(self): | ||
|  |         allPossibleForms = global_all_possible_forms | ||
|  |         # this tests with a light and darkness in the inventory. | ||
|  |         self.collect_all_but(allPossibleForms) | ||
|  |         for form in self.allForms: | ||
|  |             self.assertFalse((self.can_reach_location(self.driveFormMap[form][0])), form) | ||
|  |             self.collect(self.get_item_by_name(self.driveToAuto[form])) | ||
|  |             self.assertFalse((self.can_reach_location(self.driveFormMap[form][0])), form) | ||
|  | 
 | ||
|  |     def test_default_Final_Form(self): | ||
|  |         allPossibleForms = global_all_possible_forms | ||
|  |         self.collect_all_but(allPossibleForms) | ||
|  |         self.collect_by_name(ItemName.FinalForm) | ||
|  |         self.assertTrue((self.can_reach_location(LocationName.Finallvl2))) | ||
|  |         self.assertTrue((self.can_reach_location(LocationName.Finallvl3))) | ||
|  |         self.assertFalse((self.can_reach_location(LocationName.Finallvl4))) | ||
|  | 
 | ||
|  |     def test_default_without_LnD(self): | ||
|  |         allPossibleForms = self.allForms | ||
|  |         self.collect_all_but(allPossibleForms) | ||
|  |         for form, levels in self.driveFormMap.items(): | ||
|  |             # final form is unique and breaks using this test. Tested above. | ||
|  |             if levels[0] == LocationName.Finallvl2: | ||
|  |                 continue | ||
|  |             for driveForm in self.allForms: | ||
|  |                 if self.count(driveForm) >= 1: | ||
|  |                     for _ in range(self.count(driveForm)): | ||
|  |                         self.remove(self.get_item_by_name(driveForm)) | ||
|  |             allFormsCopy = self.allForms.copy() | ||
|  |             allFormsCopy.remove(form) | ||
|  |             self.collect(self.get_item_by_name(form)) | ||
|  |             for _ in range(self.count(ItemName.LightDarkness)): | ||
|  |                 self.remove(self.get_item_by_name(ItemName.LightDarkness)) | ||
|  |             self.assertTrue((self.can_reach_location(levels[0])), levels[0]) | ||
|  |             self.assertTrue((self.can_reach_location(levels[1])), levels[1]) | ||
|  |             self.assertFalse((self.can_reach_location(levels[2])), levels[2]) | ||
|  |             for i in range(3): | ||
|  |                 self.collect(self.get_item_by_name(allFormsCopy[i])) | ||
|  |                 # for some reason after collecting a form it can pick up light and darkness | ||
|  |                 for _ in range(self.count(ItemName.LightDarkness)): | ||
|  |                     self.remove(self.get_item_by_name(ItemName.LightDarkness)) | ||
|  | 
 | ||
|  |                 self.assertTrue((self.can_reach_location(levels[2 + i]))) | ||
|  |                 if i < 2: | ||
|  |                     self.assertFalse((self.can_reach_location(levels[3 + i]))) | ||
|  |                 else: | ||
|  |                     self.collect(self.get_item_by_name(allFormsCopy[i + 1])) | ||
|  |                     for _ in range(self.count(ItemName.LightDarkness)): | ||
|  |                         self.remove(self.get_item_by_name(ItemName.LightDarkness)) | ||
|  |                     self.assertTrue((self.can_reach_location(levels[3 + i]))) | ||
|  | 
 | ||
|  |     def test_default_with_lnd(self): | ||
|  |         allPossibleForms = self.allForms | ||
|  |         self.collect_all_but(allPossibleForms) | ||
|  |         for form, levels in self.driveFormMap.items(): | ||
|  |             if form != ItemName.FinalForm: | ||
|  |                 for driveForm in self.allForms: | ||
|  |                     for _ in range(self.count(driveForm)): | ||
|  |                         self.remove(self.get_item_by_name(driveForm)) | ||
|  |                 allFormsCopy = self.allForms.copy() | ||
|  |                 allFormsCopy.remove(form) | ||
|  |                 self.collect(self.get_item_by_name(ItemName.LightDarkness)) | ||
|  |                 self.assertFalse((self.can_reach_location(levels[0]))) | ||
|  |                 self.collect(self.get_item_by_name(form)) | ||
|  | 
 | ||
|  |                 self.assertTrue((self.can_reach_location(levels[0]))) | ||
|  |                 self.assertTrue((self.can_reach_location(levels[1]))) | ||
|  |                 self.assertTrue((self.can_reach_location(levels[2]))) | ||
|  |                 self.assertFalse((self.can_reach_location(levels[3]))) | ||
|  |                 for i in range(2): | ||
|  |                     self.collect(self.get_item_by_name(allFormsCopy[i])) | ||
|  |                     self.assertTrue((self.can_reach_location(levels[i + 3]))) | ||
|  |                     if i <= 2: | ||
|  |                         self.assertFalse((self.can_reach_location(levels[i + 4]))) | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestJustAForm(KH2TestFormBase): | ||
|  |     # this test checks if you can unlock final form with just a form. | ||
|  |     options = { | ||
|  |         "AutoFormLogic":  False, | ||
|  |         "FinalFormLogic": "just_a_form" | ||
|  |     } | ||
|  | 
 | ||
|  |     def test_just_a_form_connections(self): | ||
|  |         allPossibleForms = self.allForms | ||
|  |         self.collect_all_but(allPossibleForms) | ||
|  |         allPossibleForms.remove(ItemName.FinalForm) | ||
|  |         for form, levels in self.driveFormMap.items(): | ||
|  |             for driveForm in self.allForms: | ||
|  |                 for _ in range(self.count(driveForm)): | ||
|  |                     self.remove(self.get_item_by_name(driveForm)) | ||
|  |             if form != ItemName.FinalForm: | ||
|  |                 # reset the forms | ||
|  |                 allFormsCopy = self.allForms.copy() | ||
|  |                 allFormsCopy.remove(form) | ||
|  |                 self.assertFalse((self.can_reach_location(levels[0]))) | ||
|  |                 self.collect(self.get_item_by_name(form)) | ||
|  |                 self.assertTrue((self.can_reach_location(levels[0]))) | ||
|  |                 self.assertTrue((self.can_reach_location(levels[1]))) | ||
|  |                 self.assertTrue((self.can_reach_location(levels[2]))) | ||
|  | 
 | ||
|  |                 # level 4 of a form. This tests if the player can unlock final form. | ||
|  |                 self.assertFalse((self.can_reach_location(levels[3]))) | ||
|  |                 # amount of forms left in the pool are 3. 1 already collected and one is final form. | ||
|  |                 for i in range(3): | ||
|  |                     allFormsCopy.remove(allFormsCopy[0]) | ||
|  |                     # so we don't accidentally collect another form like light and darkness in the above tests. | ||
|  |                     self.collect_all_but(allFormsCopy) | ||
|  |                     self.assertTrue((self.can_reach_location(levels[3 + i])), levels[3 + i]) | ||
|  |                     if i < 2: | ||
|  |                         self.assertFalse((self.can_reach_location(levels[4 + i])), levels[4 + i]) | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestAutoForms(KH2TestFormBase): | ||
|  |     options = { | ||
|  |         "AutoFormLogic":  True, | ||
|  |         "FinalFormLogic": "light_and_darkness" | ||
|  |     } | ||
|  | 
 | ||
|  |     def test_Nothing(self): | ||
|  |         KH2TestBase() | ||
|  | 
 | ||
|  |     def test_auto_forms_level_progression(self): | ||
|  |         allPossibleForms = self.allForms + [ItemName.LightDarkness] | ||
|  |         # state has all auto forms | ||
|  |         self.collect_all_but(allPossibleForms) | ||
|  |         allPossibleFormsCopy = allPossibleForms.copy() | ||
|  |         collectedDrives = [] | ||
|  |         i = 0 | ||
|  |         for form in allPossibleForms: | ||
|  |             currentDriveForm = form | ||
|  |             collectedDrives += [currentDriveForm] | ||
|  |             allPossibleFormsCopy.remove(currentDriveForm) | ||
|  |             self.collect_all_but(allPossibleFormsCopy) | ||
|  |             for driveForm in self.allForms: | ||
|  |                 # +1 every iteration. | ||
|  |                 self.assertTrue((self.can_reach_location(self.driveFormMap[driveForm][i])), driveForm) | ||
|  |                 # making sure having the form still gives an extra drive level to its own form. | ||
|  |                 if driveForm in collectedDrives and i < 5: | ||
|  |                     self.assertTrue((self.can_reach_location(self.driveFormMap[driveForm][i + 1])), driveForm) | ||
|  |             i += 1 |