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
							 |