89 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import unittest
 | 
						|
 | 
						|
from ..options.utils import fill_dataclass_with_default
 | 
						|
from ... import create_content, options
 | 
						|
from ...regions.entrance_rando import create_player_randomization_flag
 | 
						|
from ...regions.model import RandomizationFlag, ConnectionData
 | 
						|
 | 
						|
 | 
						|
class TestConnectionData(unittest.TestCase):
 | 
						|
 | 
						|
    def test_given_entrances_not_randomized_when_is_eligible_for_randomization_then_not_eligible(self):
 | 
						|
        player_flag = RandomizationFlag.NOT_RANDOMIZED
 | 
						|
 | 
						|
        connection = ConnectionData("Go to Somewhere", "Somewhere", RandomizationFlag.PELICAN_TOWN)
 | 
						|
        is_eligible = connection.is_eligible_for_randomization(player_flag)
 | 
						|
 | 
						|
        self.assertFalse(is_eligible)
 | 
						|
 | 
						|
    def test_given_pelican_town_connection_when_is_eligible_for_pelican_town_randomization_then_eligible(self):
 | 
						|
        player_flag = RandomizationFlag.BIT_PELICAN_TOWN
 | 
						|
        connection = ConnectionData("Go to Somewhere", "Somewhere", RandomizationFlag.PELICAN_TOWN)
 | 
						|
 | 
						|
        is_eligible = connection.is_eligible_for_randomization(player_flag)
 | 
						|
 | 
						|
        self.assertTrue(is_eligible)
 | 
						|
 | 
						|
    def test_given_pelican_town_connection_when_is_eligible_for_buildings_randomization_then_eligible(self):
 | 
						|
        player_flag = RandomizationFlag.BIT_BUILDINGS
 | 
						|
        connection = ConnectionData("Go to Somewhere", "Somewhere", RandomizationFlag.PELICAN_TOWN)
 | 
						|
 | 
						|
        is_eligible = connection.is_eligible_for_randomization(player_flag)
 | 
						|
 | 
						|
        self.assertTrue(is_eligible)
 | 
						|
 | 
						|
    def test_given_non_progression_connection_when_is_eligible_for_pelican_town_randomization_then_not_eligible(self):
 | 
						|
        player_flag = RandomizationFlag.BIT_PELICAN_TOWN
 | 
						|
        connection = ConnectionData("Go to Somewhere", "Somewhere", RandomizationFlag.NON_PROGRESSION)
 | 
						|
 | 
						|
        is_eligible = connection.is_eligible_for_randomization(player_flag)
 | 
						|
 | 
						|
        self.assertFalse(is_eligible)
 | 
						|
 | 
						|
    def test_given_non_progression_masteries_connection_when_is_eligible_for_non_progression_randomization_then_eligible(self):
 | 
						|
        player_flag = RandomizationFlag.BIT_NON_PROGRESSION
 | 
						|
        connection = ConnectionData("Go to Somewhere", "Somewhere", RandomizationFlag.NON_PROGRESSION ^ RandomizationFlag.EXCLUDE_MASTERIES)
 | 
						|
 | 
						|
        is_eligible = connection.is_eligible_for_randomization(player_flag)
 | 
						|
 | 
						|
        self.assertTrue(is_eligible)
 | 
						|
 | 
						|
    def test_given_non_progression_masteries_connection_when_is_eligible_for_non_progression_without_masteries_randomization_then_not_eligible(self):
 | 
						|
        player_flag = RandomizationFlag.BIT_NON_PROGRESSION | RandomizationFlag.EXCLUDE_MASTERIES
 | 
						|
        connection = ConnectionData("Go to Somewhere", "Somewhere", RandomizationFlag.NON_PROGRESSION ^ RandomizationFlag.EXCLUDE_MASTERIES)
 | 
						|
 | 
						|
        is_eligible = connection.is_eligible_for_randomization(player_flag)
 | 
						|
 | 
						|
        self.assertFalse(is_eligible)
 | 
						|
 | 
						|
 | 
						|
class TestRandomizationFlag(unittest.TestCase):
 | 
						|
 | 
						|
    def test_given_entrance_randomization_choice_when_create_player_randomization_flag_then_only_relevant_bit_is_enabled(self):
 | 
						|
        for entrance_randomization_choice, expected_bit in (
 | 
						|
                (options.EntranceRandomization.option_disabled, RandomizationFlag.NOT_RANDOMIZED),
 | 
						|
                (options.EntranceRandomization.option_pelican_town, RandomizationFlag.BIT_PELICAN_TOWN),
 | 
						|
                (options.EntranceRandomization.option_non_progression, RandomizationFlag.BIT_NON_PROGRESSION),
 | 
						|
                (options.EntranceRandomization.option_buildings_without_house, RandomizationFlag.BIT_BUILDINGS),
 | 
						|
                (options.EntranceRandomization.option_buildings, RandomizationFlag.BIT_BUILDINGS),
 | 
						|
                (options.EntranceRandomization.option_chaos, RandomizationFlag.BIT_BUILDINGS),
 | 
						|
        ):
 | 
						|
            player_options = fill_dataclass_with_default({options.EntranceRandomization: entrance_randomization_choice})
 | 
						|
            content = create_content(player_options)
 | 
						|
 | 
						|
            flag = create_player_randomization_flag(player_options.entrance_randomization, content)
 | 
						|
 | 
						|
            self.assertEqual(flag, expected_bit)
 | 
						|
 | 
						|
    def test_given_masteries_not_randomized_when_create_player_randomization_flag_then_exclude_masteries_bit_enabled(self):
 | 
						|
        for entrance_randomization_choice in set(options.EntranceRandomization.options.values()) ^ {options.EntranceRandomization.option_disabled}:
 | 
						|
            player_options = fill_dataclass_with_default({
 | 
						|
                options.EntranceRandomization: entrance_randomization_choice,
 | 
						|
                options.SkillProgression: options.SkillProgression.option_progressive
 | 
						|
            })
 | 
						|
            content = create_content(player_options)
 | 
						|
 | 
						|
            flag = create_player_randomization_flag(player_options.entrance_randomization, content)
 | 
						|
 | 
						|
            self.assertIn(RandomizationFlag.EXCLUDE_MASTERIES, flag)
 |