import sys
import os
cwd = os.getcwd()
sys.path += [cwd, os.path.join(cwd, 'plugins')]
import unittest

import classes
import relay
import conf

def dummyf():
    pass

class TestRelay(unittest.TestCase):
    def setUp(self):
        self.irc = classes.FakeIRC('fakeirc', classes.FakeProto, conf.testconf)
        self.irc.maxnicklen = 20
        self.f = lambda nick: relay.normalizeNick(self.irc, 'unittest', nick)
        # Fake our protocol name to something that supports slashes in nicks.
        # relay uses a whitelist for this to prevent accidentally introducing
        # bad nicks:
        self.irc.protoname = "inspircd"

    def testNormalizeNick(self):
        # Second argument simply states the suffix.
        self.assertEqual(self.f('helloworld'), 'helloworld/unittest')
        self.assertEqual(self.f('ObnoxiouslyLongNick'), 'Obnoxiously/unittest')
        self.assertEqual(self.f('10XAAAAAA'), '_10XAAAAAA/unittest')

    def testNormalizeNickConflict(self):
        self.assertEqual(self.f('helloworld'), 'helloworld/unittest')
        self.irc.users['10XAAAAAA'] = classes.IrcUser('helloworld/unittest', 1234, '10XAAAAAA')
        # Increase amount of /'s by one
        self.assertEqual(self.f('helloworld'), 'helloworld//unittest')
        self.irc.users['10XAAAAAB'] = classes.IrcUser('helloworld//unittest', 1234, '10XAAAAAB')
        # Cut off the nick, not the suffix if the result is too long.
        self.assertEqual(self.f('helloworld'), 'helloworl///unittest')

    def testNormalizeNickRemovesSlashes(self):
        self.irc.protoname = "charybdis"
        try:
            self.assertEqual(self.f('helloworld'), 'helloworld|unittest')
            self.assertEqual(self.f('abcde/eJanus'), 'abcde|eJanu|unittest')
            self.assertEqual(self.f('ObnoxiouslyLongNick'), 'Obnoxiously|unittest')
        finally:
            self.irc.protoname = "inspircd"
