Files
libloot-python/src/test.py
T

119 lines
3.7 KiB
Python
Raw Normal View History

2016-08-10 19:03:50 +01:00
#!/usr/bin/env python
import cProfile
2016-09-18 14:34:41 +01:00
import os.path
import shutil
2016-08-10 19:03:50 +01:00
import unittest
from loot_api import Version
from loot_api import WrapperVersion
2016-08-10 19:03:50 +01:00
from loot_api import GameType
2016-09-18 14:34:41 +01:00
from loot_api import LanguageCode
2016-08-10 19:03:50 +01:00
from loot_api import Message
from loot_api import MessageType
from loot_api import create_database
from loot_api import is_compatible
2016-09-18 14:34:41 +01:00
class GameFixture(unittest.TestCase):
game_path = os.path.join(u'.', u'Oblivion')
2016-09-18 20:24:04 +01:00
local_path = os.path.join(u'.', u'local')
2016-09-18 14:34:41 +01:00
def setUp(self):
data_path = os.path.join(self.game_path, 'Data')
master_file = os.path.join(data_path, 'Oblivion.esm')
os.makedirs(data_path)
open(master_file, 'a').close()
2016-09-18 20:24:04 +01:00
os.makedirs(self.local_path)
2016-09-18 14:34:41 +01:00
def tearDown(self):
shutil.rmtree(self.game_path)
2016-09-18 20:24:04 +01:00
shutil.rmtree(self.local_path)
2016-09-18 14:34:41 +01:00
class TestLootApi(GameFixture):
2016-08-10 19:03:50 +01:00
def test_is_compatible(self):
2016-09-18 14:34:41 +01:00
self.assertFalse(is_compatible(0, 9, 0))
self.assertTrue(is_compatible(0, 10, 0))
2016-08-10 19:03:50 +01:00
def test_version(self):
self.assertEqual(Version.major, 0)
2016-09-18 14:34:41 +01:00
self.assertEqual(Version.minor, 10)
2016-11-13 15:21:16 +00:00
self.assertEqual(Version.patch, 1)
2016-08-10 19:03:50 +01:00
self.assertNotEqual(Version.revision, u'')
2016-11-13 15:21:16 +00:00
self.assertEqual(Version.string(), "0.10.1")
2016-08-10 19:03:50 +01:00
def test_wrapper_version(self):
self.assertEqual(WrapperVersion.major, 1)
2016-11-06 14:48:22 +00:00
self.assertEqual(WrapperVersion.minor, 1)
2016-11-13 15:21:34 +00:00
self.assertEqual(WrapperVersion.patch, 2)
self.assertNotEqual(WrapperVersion.revision, u'')
self.assertNotEqual(WrapperVersion.revision, Version.revision)
2016-11-13 15:21:34 +00:00
self.assertEqual(WrapperVersion.string(), "1.1.2")
2016-08-10 19:03:50 +01:00
def test_create_db(self):
2016-09-18 20:24:04 +01:00
db = create_database(GameType.tes4, self.game_path, self.local_path)
2016-08-10 19:03:50 +01:00
self.assertNotEqual(db, None)
2016-09-18 14:34:41 +01:00
class TestDatabaseInterface(GameFixture):
2016-08-10 19:03:50 +01:00
masterlist_path = u'masterlist.yaml'
def setUp(self):
2016-09-18 14:34:41 +01:00
super(TestDatabaseInterface, self).setUp()
2016-09-18 20:24:04 +01:00
self.db = create_database(GameType.tes4, self.game_path, self.local_path)
2016-08-10 19:03:50 +01:00
def test_load_lists(self):
self.db.load_lists(self.masterlist_path, u'')
def test_get_plugin_tags(self):
self.db.load_lists(self.masterlist_path, u'')
tags = self.db.get_plugin_tags(u'Unofficial Oblivion Patch.esp')
self.assertNotEqual(tags, None)
self.assertFalse(tags.userlist_modified)
self.assertEqual(tags.added, set([
2016-09-18 14:34:41 +01:00
u'Actors.ACBS',
u'Actors.AIData',
u'Actors.AIPackages',
u'Actors.CombatStyle',
u'Actors.DeathItem',
u'Actors.Stats',
u'C.Climate',
u'C.Light',
u'C.Music',
u'C.Name',
u'C.Owner',
u'Creatures.Blood',
u'Delev',
u'Factions',
u'Invent',
u'Names',
u'NPC.Class',
u'Relations',
u'Relev',
u'Scripts',
2016-08-10 19:03:50 +01:00
u'Stats'
]))
self.assertEqual(tags.removed, set([u'C.Water']))
# cProfile.runctx('self.test_get_plugin_tags_performance()', globals(), locals(), sort='cumtime')
# def test_get_plugin_tags_performance(self):
# self.db.load_lists(self.masterlist_path, u'')
#
# for i in xrange(200000):
# tags = self.db.get_plugin_tags(u'Unofficial Oblivion Patch.esp')
def test_get_plugin_messages(self):
self.db.load_lists(self.masterlist_path, u'')
2016-09-18 14:34:41 +01:00
messages = self.db.get_plugin_messages(u'Oblivion.esm', LanguageCode.english)
2016-08-10 19:03:50 +01:00
self.assertEqual(len(messages), 1)
self.assertEqual(messages[0].type, MessageType.error)
self.assertEqual(messages[0].text, u'This must not be activated. However, it can be useful when porting Oblivion mods to Nehrim.')
if __name__ == '__main__':
unittest.main()