testCheckCaseTrigger.py @=19941

  • //
  • guest/
  • robert_cowham/
  • perforce/
  • utils/
  • triggers/
  • testCheckCaseTrigger.py
  • View
  • Commits
  • Open Download .zip Download (3 KB)
	# -*- 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()