Beispiel #1
0
 def setUp(self):
     self._data_provider = MagicMock()
     self._lineage = {"archetype": "SomeArchetype", "family": "SomeFamily"}
     self._class_name = "SomeClass"
     self._tree_name = "SomeTree"
     self._tree_type = "TreeType"
     self._tree_y_subclass = ""
     
     self._spell_effect_formatter = MagicMock()
     self._coord_mapper = MagicMock()
     self._logger = MagicMock()
     self.sut = AAFactory(self._data_provider, self._spell_effect_formatter, self._coord_mapper, self._logger)
     
     self._coord_mapper.map_coords.side_effect = lambda x, y: x
Beispiel #2
0
class TestAAFactory(unittest.TestCase):
    def setUp(self):
        self._data_provider = MagicMock()
        self._lineage = {"archetype": "SomeArchetype", "family": "SomeFamily"}
        self._class_name = "SomeClass"
        self._tree_name = "SomeTree"
        self._tree_type = "TreeType"
        self._tree_y_subclass = ""
        
        self._spell_effect_formatter = MagicMock()
        self._coord_mapper = MagicMock()
        self._logger = MagicMock()
        self.sut = AAFactory(self._data_provider, self._spell_effect_formatter, self._coord_mapper, self._logger)
        
        self._coord_mapper.map_coords.side_effect = lambda x, y: x
        
    def _setup_spells(self, expected_crc, returned_spells):
        def _mock_spells(crc):
            if crc == expected_crc:
                return { "spell_list": returned_spells }
        self._data_provider.spells.side_effect = _mock_spells
        
    def test_create_maps_basic_properties(self):
        aa_node = AABuilder().build()
        
        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)
        
        self.assertEqual(result.id, 0)
        self.assertEqual(result.soe_id, aa_node["nodeid"])
        self.assertEqual(result.parent_ids, [])
        self.assertEqual(result.name, aa_node["name"])
        self.assertEqual(result.description, aa_node["description"])
        self.assertEqual(result.title, aa_node["title"])
        self.assertEqual(result.subclass, aa_node["classification"])
        self.assertEqual(result.max_level, aa_node["maxtier"])
        self.assertEqual(result.coords, [aa_node["xcoord"], aa_node["ycoord"]])
        self.assertEqual(result.level, 0)
        self.assertEqual(result.cost, aa_node["pointspertier"])
        self.assertEqual(result.children, [])
        
    def test_create_fetches_effects_in_order(self):
        aa_node = AABuilder().spellcrc(123).build()
        spell_rank5 = SpellBuilder().with_crc(123).rank(5).add_effect('Rank5', 1).build()
        spell_rank1 = SpellBuilder().with_crc(123).rank(1).add_effect('Rank1', 1).build()
        self._setup_spells(123, [spell_rank5, spell_rank1])
        
        self._spell_effect_formatter.format.side_effect = lambda effects: effects[0]["description"] + "Formatted" 
        
        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)
        
        self.assertEqual(result.effects, ["Rank1Formatted", "Rank5Formatted"])
        
    def test_create_sets_icon_ids(self):
        aa_node = AABuilder().spellcrc(123).build()
        spell = SpellBuilder().with_crc(123).backdrop(50).icon(100).build()
        self._setup_spells(123, [spell])
        
        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)
        
        self.assertDictEqual(result.icon, { "icon": 100, "backdrop": 50 })
        
    def test_create_sets_parent(self):
        aa_node = AABuilder().parent_ids([5]).build()
        
        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)
        
        self.assertEqual(result.parent_ids, [aa_node["firstparentid"]])
        
    def test_create_sets_prereqs(self):
        aa_node = AABuilder().requires_global_points(1)\
            .requires_parent_points(2)\
            .requires_subtree_points(3)\
            .requires_tree_points(4)\
            .build()

        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)
            
        expected_prereqs = { "parent_subtree": 0,
                            "global": 1,
                            "tree": 4,
                            "subtree": 3,
                            "parent": 2}
        self.assertDictEqual(result.prereqs, expected_prereqs)
        
    def test_create_shadows_subclass_matches_lineage_archetype_sets_parent_subtree_prereq(self):
        self._tree_name = "Shadows"
        
        aa_node = AABuilder().subclass(self._lineage["archetype"]).build()

        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)

        self.assertEqual(result.prereqs["parent_subtree"], 10)
        
    def test_create_shadows_subclass_matches_lineage_family_sets_parent_subtree_prereq(self):
        self._tree_name = "Shadows"
        
        aa_node = AABuilder().subclass(self._lineage["family"]).build()

        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)

        self.assertEqual(result.prereqs["parent_subtree"], 10)
        
    def test_create_shadows_subclass_matches_class_name_sets_parent_subtree_prereq(self):
        self._tree_name = "Shadows"
        
        aa_node = AABuilder().subclass(self._class_name).build()

        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)

        self.assertEqual(result.prereqs["parent_subtree"], 10)
        
    def test_create_parent_subtree_prereqs_ignored_if_not_shadows_tree(self):
        self._tree_name = "NonShadowsTree"
        
        aa_node = AABuilder().subclass(self._lineage["family"]).build()

        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)

        self.assertEqual(result.prereqs["parent_subtree"], 0)
        
    def test_create_parent_subtree_prereqs_ignored_if_subclass_prereq_present(self):
        self._tree_name = "Shadows"
        
        aa_node = AABuilder().subclass(self._lineage["family"]).requires_subtree_points(10).build()

        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)

        self.assertEqual(result.prereqs["parent_subtree"], 0)
        
    def test_create_subtree_prereq_created_if_subclass_matches_y_classifcation(self):
        self._tree_y_subclass = "YSubclass"
        aa_node = AABuilder().subclass("YSubclass").cost(3).build()

        result = self.sut.create(aa_node, self._lineage, self._class_name, self._tree_name, self._tree_y_subclass)

        self.assertEqual(result.prereqs["subtree"], 3)
        
    def test_create_all_replaces_parent_soe_ids(self):
        aa_nodes = [AABuilder().with_id(50).build(),
                    AABuilder().with_id(60).parent_ids([50]).build(),
                    AABuilder().with_id(70).parent_ids([60]).build(),
                    AABuilder().with_id(80).build()]

        aa, orphans, subtrees = self.sut.create_all(aa_nodes, self._lineage, self._class_name, self._tree_name, self._tree_type, self._tree_y_subclass)
        
        self.assertEqual(list(map(lambda n: n.parent_ids, aa)), [[], [0], [1], []])
        
    def test_create_populates_children(self):
        aa_nodes = [AABuilder().with_id(50).build(),
                    AABuilder().with_id(60).parent_ids([50]).build(),
                    AABuilder().with_id(70).parent_ids([50]).build(),
                    AABuilder().with_id(80).parent_ids([60]).build(),
                    AABuilder().with_id(90).parent_ids([60]).build(),
                    AABuilder().with_id(100).build()]

        aa, orphans, subtrees = self.sut.create_all(aa_nodes, self._lineage, self._class_name, self._tree_name, self._tree_type, self._tree_y_subclass)
        
        self.assertEqual(list(map(lambda n: n.children, aa)), [[1, 2], [3, 4], [], [], [], []])
        
    def test_create_sorts_aa_top_to_bottom_left_to_right(self):
        aa_nodes = [AABuilder().with_id(50).coords(1, 1).build(),
                    AABuilder().with_id(60).coords(0, 0).build(),
                    AABuilder().with_id(70).coords(1, 0).build(),
                    AABuilder().with_id(80).coords(0, 1).build()]

        aa, orphans, subtrees = self.sut.create_all(aa_nodes, self._lineage, self._class_name, self._tree_name, self._tree_type, self._tree_y_subclass)
        
        self.assertEquals(list(map(lambda a: a.coords, aa)), [[0, 0], [1, 0], [0, 1], [1, 1]])
        
    def test_create_reorders_aa_by_sorted_order(self):
        aa_nodes = [AABuilder().with_id(50).coords(1, 1).build(),
                    AABuilder().with_id(60).coords(0, 0).build(),
                    AABuilder().with_id(70).coords(1, 0).build(),
                    AABuilder().with_id(80).coords(0, 1).build()]

        aa, orphans, subtrees = self.sut.create_all(aa_nodes, self._lineage, self._class_name, self._tree_name, self._tree_type, self._tree_y_subclass)
        
        self.assertEquals(list(map(lambda a: a.id, aa)), [0, 1, 2, 3])
        
    def test_create_sets_orphans_to_aa_with_no_parents(self):
        aa_nodes = [AABuilder().with_id(5).build(),
                    AABuilder().with_id(6).build(),
                    AABuilder().with_id(7).parent_ids([5]).build()] 

        aa, orphans, subtrees = self.sut.create_all(aa_nodes, self._lineage, self._class_name, self._tree_name, self._tree_type, self._tree_y_subclass)

        self.assertEqual(orphans, [0, 1])
        
    def test_create_sets_subtrees_to_distinct_aa_subclasses(self):
        aa_nodes = [AABuilder().subclass("Subclass1").build(),
                    AABuilder().subclass("Subclass1").build(),
                    AABuilder().subclass("Subclass2").build()] 

        aa, orphans, subtrees = self.sut.create_all(aa_nodes, self._lineage, self._class_name, self._tree_name, self._tree_type, self._tree_y_subclass)

        self.assertEqual(subtrees,  { 'Subclass1': 0, 'Subclass2': 0 })
        
    def test_create_sets_multiple_parents(self):
        aa_nodes = [AABuilder().with_id(0).build(),
                    AABuilder().with_id(1).build(),
                    AABuilder().with_id(2).parent_ids([0, 1]).build()] 

        aa, orphans, subtrees = self.sut.create_all(aa_nodes, self._lineage, self._class_name, self._tree_name, self._tree_type, self._tree_y_subclass)

        self.assertEqual(aa[2].parent_ids, [0, 1])
Beispiel #3
0
    def run(self):
        start_time = datetime.datetime.now()

        logger = ConsoleLogger()
        logger.log('Started')

        cache_dir_path = os.path.abspath('./soe/cached_data')
        logger.log('Cache path: ' + cache_dir_path)

        data_provider = CachedDataProvider(SonyDataProvider(UrlReader(logger)),
                                           FileDataCache(cache_dir_path))
        spell_effect_formatter = SpellEffectFormatter()
        coord_mapper = AACoordMapper()

        aa_factory = AAFactory(data_provider, spell_effect_formatter,
                               coord_mapper, logger)
        tree_factory = TreeFactory(data_provider, aa_factory, logger)
        point_pool_factory = PointPoolFactory()
        class_factory = EQ2ClassFactory(data_provider, tree_factory,
                                        point_pool_factory, logger)

        json_writer = JsonFileWriter(logger)

        build_dir = os.path.abspath('../../build')

        icon_output_path = os.path.join(build_dir, 'icons')
        self._ensure_dir_exists(icon_output_path)
        icon_downloader = IconDownloader(data_provider, icon_output_path,
                                         logger)

        image_manipulator = ImageManipulator()

        sprite_output_path = os.path.join(build_dir, 'sprites')
        self._ensure_dir_exists(sprite_output_path)
        sprite_image_generator = SpriteImageGenerator(image_manipulator,
                                                      icon_output_path,
                                                      sprite_output_path,
                                                      logger)

        classes = list(class_factory.create_classes())

        tree_output_dir = os.path.join('.', 'output')
        tree_minified_output_dir = os.path.join('.', 'output_min')

        icon_size = 42
        icon_padding = 1
        sprite_css_generator = SpriteCssGenerator()

        for c in classes:
            icon_downloader.download_all(c)
            sprite_image_generator.generate(c, icon_size, icon_padding)

            filename = c.name + '.json'
            json_writer.write(c.to_dict(),
                              os.path.join(tree_output_dir, filename),
                              indent=3)
            json_writer.write(c.to_dict(),
                              os.path.join(tree_minified_output_dir, filename))

            if c.name == 'Beastlord':
                beastlord_css = sprite_css_generator.generate_css(
                    c.trees, icon_size, icon_padding, '.Beastlord ')
                self._write_to_text_file(
                    os.path.join(sprite_output_path, "sprites-beastlord.css"),
                    beastlord_css)

        css = sprite_css_generator.generate_css(classes[0].trees, icon_size,
                                                icon_padding)
        self._write_to_text_file(
            os.path.join(sprite_output_path, "sprites.css"), css)

        end_time = datetime.datetime.now()
        logger.log('Done in {0}'.format(end_time - start_time))