from __future__ import print_function from TestTriggers import TestTriggers import unittest import time, os, sys import P4 class TestCheckCaseTrigger(TestTriggers): baseTrigger = "P4Triggers.py" caseTrigger = "CheckCaseTrigger.py" def setUp(self): TestTriggers.setUp(self) self.installTrigger() def installTrigger(self): self.assertTrue(os.path.exists(self.baseTrigger), "Can't find {0}".format(self.baseTrigger)) self.assertTrue(os.path.exists(self.caseTrigger), "Can't find {0}".format(self.caseTrigger)) with open(self.caseTrigger) as f: caseTriggerCode = f.read() with open(self.baseTrigger) as f: baseTriggerCode = f.read() self.p4.connect() self._setClient() baseTriggerPath = os.path.join(self.client_root, self.baseTrigger) with open(baseTriggerPath, "w") as f: f.write(baseTriggerCode) caseTriggerPath = os.path.join(self.client_root, self.caseTrigger) with open(caseTriggerPath, "w") as f: f.write(caseTriggerCode) portWithQuotes = self.p4.port.replace("\"","") caseTrigger = 'CheckCase change-submit //... ' \ '"{0} {1} %change% port=%quote%{2}%quote%"'.format(sys.executable, caseTriggerPath, portWithQuotes) triggers = self.p4.fetch_triggers() triggers._triggers = [ caseTrigger ] self.p4.save_triggers(triggers) self.p4.disconnect() def addFile(self, name): os.makedirs(self.client_root, exist_ok=True) fname = os.path.join(self.client_root, name) with open(fname, "w") as f: f.write("Content") self.p4.run_add(fname) def createFiles(self, testDir): testAbsoluteDir = os.path.join(self.client_root, testDir) os.mkdir(testAbsoluteDir) # create a bunch of files files = ('foo.txt', 'bar.txt', 'baz.txt') for file in files: fname = os.path.join(testAbsoluteDir, file) f = open(fname, "w") f.write("Test Text") f.close() self.p4.run_add(testDir + "/" + file) self.assertEqual(len(self.p4.run_opened()), len(files), "Unexpected number of open files") return files def expectFailSubmit(self, msg, *args): """Submits the changes, but expects to fail the trigger""" try: result = self.p4.run_submit(*args) self.fail(msg) except P4.P4Exception as inst: pass # expected def testSimpleSubmit(self): self.p4.connect() self.assertTrue(self.p4.connected(), "Not connected") self._setClient() self.assertEqual(len(self.p4.run_opened()), 0, "Shouldn't have open files") testDir = 'test_files' files = self.createFiles(testDir) change = self.p4.fetch_change() self.assertTrue( isinstance(change, P4.Spec), "Change spec is not of type P4.Spec") change._description = "My Add Test" self._doSubmit("Failed to submit the add", change) def testSimpleFail(self): self.p4.connect() self._setClient() self.addFile("foo") change = self.p4.fetch_change() change._description = "Simple add" self._doSubmit("Adding one file should not fail", change) if __name__ == '__main__': unittest.main()