134 lines
5.3 KiB
Python
134 lines
5.3 KiB
Python
from django.conf import settings
|
|
from django.test import TestCase
|
|
from mock import Mock
|
|
from evennia.objects.objects import DefaultObject, DefaultCharacter, DefaultRoom, DefaultExit
|
|
from evennia.accounts.accounts import DefaultAccount
|
|
from evennia.scripts.scripts import DefaultScript
|
|
from evennia.server.serversession import ServerSession
|
|
from evennia.server.sessionhandler import SESSIONS
|
|
from evennia.utils import create
|
|
from evennia.utils.idmapper.models import flush_cache
|
|
|
|
|
|
SESSIONS.data_out = Mock()
|
|
SESSIONS.disconnect = Mock()
|
|
|
|
|
|
class EvenniaTest(TestCase):
|
|
"""
|
|
Base test for Evennia, sets up a basic environment.
|
|
"""
|
|
account_typeclass = DefaultAccount
|
|
object_typeclass = DefaultObject
|
|
character_typeclass = DefaultCharacter
|
|
exit_typeclass = DefaultExit
|
|
room_typeclass = DefaultRoom
|
|
script_typeclass = DefaultScript
|
|
|
|
def setUp(self):
|
|
"""
|
|
Sets up testing environment
|
|
"""
|
|
self.account = create.create_account("TestAccount", email="test@test.com", password="testpassword", typeclass=self.account_typeclass)
|
|
self.account2 = create.create_account("TestAccount2", email="test@test.com", password="testpassword", typeclass=self.account_typeclass)
|
|
self.room1 = create.create_object(self.room_typeclass, key="Room", nohome=True)
|
|
self.room1.db.desc = "room_desc"
|
|
settings.DEFAULT_HOME = "#%i" % self.room1.id # we must have a default home
|
|
# Set up fake prototype module for allowing tests to use named prototypes.
|
|
settings.PROTOTYPE_MODULES = "evennia.utils.tests.data.prototypes_example"
|
|
self.room2 = create.create_object(self.room_typeclass, key="Room2")
|
|
self.exit = create.create_object(self.exit_typeclass, key='out', location=self.room1, destination=self.room2)
|
|
self.obj1 = create.create_object(self.object_typeclass, key="Obj", location=self.room1, home=self.room1)
|
|
self.obj2 = create.create_object(self.object_typeclass, key="Obj2", location=self.room1, home=self.room1)
|
|
self.char1 = create.create_object(self.character_typeclass, key="Char", location=self.room1, home=self.room1)
|
|
self.char1.permissions.add("Developer")
|
|
self.char2 = create.create_object(self.character_typeclass, key="Char2", location=self.room1, home=self.room1)
|
|
self.char1.account = self.account
|
|
self.account.db._last_puppet = self.char1
|
|
self.char2.account = self.account2
|
|
self.account2.db._last_puppet = self.char2
|
|
self.script = create.create_script(self.script_typeclass, key="Script")
|
|
self.account.permissions.add("Developer")
|
|
|
|
# set up a fake session
|
|
|
|
dummysession = ServerSession()
|
|
dummysession.init_session("telnet", ("localhost", "testmode"), SESSIONS)
|
|
dummysession.sessid = 1
|
|
SESSIONS.portal_connect(dummysession.get_sync_data()) # note that this creates a new Session!
|
|
session = SESSIONS.session_from_sessid(1) # the real session
|
|
SESSIONS.login(session, self.account, testmode=True)
|
|
self.session = session
|
|
|
|
def tearDown(self):
|
|
flush_cache()
|
|
del SESSIONS[self.session.sessid]
|
|
self.account.delete()
|
|
self.account2.delete()
|
|
super(EvenniaTest, self).tearDown()
|
|
|
|
|
|
import unittest
|
|
import inspect
|
|
|
|
class TestCreateScript(EvenniaTest):
|
|
|
|
def test_create_script(self):
|
|
class TestScriptA(DefaultScript):
|
|
def at_script_creation(self):
|
|
self.key = 'test_script'
|
|
self.interval = 10
|
|
self.persistent = False
|
|
|
|
script = create.create_script(TestScriptA, key='test_script')
|
|
assert script is not None
|
|
assert script.interval == 10
|
|
assert script.key == 'test_script'
|
|
script.stop()
|
|
|
|
@unittest.expectedFailure
|
|
def test_create_script_w_repeats_equal_1(self):
|
|
class TestScriptB(DefaultScript):
|
|
def at_script_creation(self):
|
|
self.key = 'test_script'
|
|
self.interval = 10
|
|
self.repeats = 1
|
|
self.persistent = False
|
|
|
|
script = create.create_script(TestScriptB, key='test_script')
|
|
assert script is not None
|
|
assert script.interval == 10
|
|
assert script.repeats == 1
|
|
assert script.key == 'test_script'
|
|
script.stop()
|
|
|
|
def test_create_script_w_repeats_equal_2(self):
|
|
class TestScriptC(DefaultScript):
|
|
def at_script_creation(self):
|
|
self.key = 'test_script'
|
|
self.interval = 10
|
|
self.repeats = 2
|
|
self.persistent = False
|
|
|
|
script = create.create_script(TestScriptC, key='test_script')
|
|
assert script is not None
|
|
assert script.interval == 10
|
|
assert script.repeats == 2
|
|
assert script.key == 'test_script'
|
|
script.stop()
|
|
|
|
def test_create_script_w_repeats_equal_1_and_delayed(self):
|
|
class TestScriptD(DefaultScript):
|
|
def at_script_creation(self):
|
|
self.key = 'test_script'
|
|
self.interval = 10
|
|
self.start_delay = True
|
|
self.repeats = 1
|
|
self.persistent = False
|
|
|
|
script = create.create_script(TestScriptD, key='test_script')
|
|
assert script is not None
|
|
assert script.interval == 10
|
|
assert script.repeats == 1
|
|
assert script.key == 'test_script'
|
|
script.stop()
|