# -*- 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()