# -*- encoding: UTF8 -*-
# Test harness for JobsCmdFilter.py
from __future__ import print_function
import sys
import unittest
import os, shutil, stat, time
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import testp4
import P4
from CheckCaseTrigger import CheckCaseTrigger
python3 = sys.version_info[0] >= 3
def onRmTreeError(function, path, exc_info):
os.chmod(path, stat.S_IWRITE)
os.remove(path)
def rmdir(dirname):
shutil.rmtree(dirname, False, onRmTreeError)
def ensureDirectory(directory):
if not os.path.isdir(directory):
os.makedirs(directory)
def localDirectory(root, *dirs):
"Create and ensure it exists"
dir_path = os.path.join(root, *dirs)
ensureDirectory(dir_path)
return dir_path
def create_file(file_name, contents):
"Create file with specified contents"
ensureDirectory(os.path.dirname(file_name))
with open(file_name, 'w') as f:
print(contents, file=f)
class TestCheckCaseTrigger(unittest.TestCase):
def __init__(self, methodName='runTest'):
super(TestCheckCaseTrigger, self).__init__(methodName=methodName)
def assertRegex(self, *args, **kwargs):
if python3:
return super(TestCheckCaseTrigger, self).assertRegex(*args, **kwargs)
else:
return super(TestCheckCaseTrigger, self).assertRegexpMatches(*args, **kwargs)
def setUp(self):
pass
def tearDown(self):
pass
def testCheckCaseTrigger(self):
"check triggers fires OK"
self.server = testp4.P4Server()
trigpath = os.path.join(os.path.dirname(os.path.abspath(__file__)), "CheckCaseTrigger.py")
p4 = self.server.p4
triggers = p4.fetch_triggers()
triggers['Triggers'] = ['check-case-trigger change-submit //... "python ' + trigpath + ' %changelist%"']
p4.save_triggers(triggers)
p4.disconnect() # Needed to pick up triggers
self.server.resetp4()
p4 = self.server.p4
triggers = p4.fetch_triggers()
print(triggers)
client = p4.fetch_client()
client._view = ['//depot/... //%s/...' % client._client]
p4.save_client(client)
trigger_errmsg = "validation failed: Your submission has been rejected because the following files"
dir_a = localDirectory(self.server.client_root, "dir_a")
fname1 = os.path.join(dir_a, "test.txt")
create_file(fname1, 'Test content')
p4.run_reconcile("%s/..." % self.server.client_root)
chg = p4.fetch_change()
chg._description = "test change - should work"
p4.save_submit(chg)
# Remove directory and recreate in different case - should work across OS
rmdir(dir_a)
dir_b = localDirectory(self.server.client_root, "DIR_A")
fname2 = os.path.join(dir_b, "test2.txt")
create_file(fname2, 'Test content')
p4.run_add("%s/..." % dir_b)
chg = p4.fetch_change()
chg._description = "test change - should fail"
try:
print(p4.save_submit(chg))
self.assertTrue(False, "Expected exception not encountered")
except P4.P4Exception as e:
self.assertRegex(str(e), trigger_errmsg)
if __name__ == '__main__':
unittest.main()