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 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 testFiles(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) # make sure there are no open files and all files are there self.assertEqual( len(self.p4.run_opened()), 0, "Still files in the open list") self.assertEqual( len(self.p4.run_files('...')), len(files), "Less files than expected") # edit the files self.assertEqual( len(self.p4.run_edit('...')), len(files), "Not all files open for edit") self.assertEqual( len(self.p4.run_opened()), len(files), "Not enough files open for edit") change = self.p4.fetch_change() change._description = "My Edit Test" self._doSubmit("Failed to submit the edit", change) self.assertEqual( len(self.p4.run_opened()), 0, "Still files in the open list") # branch testing branchDir = 'test_branch' try: result = self.p4.run_integ(testDir + '/...', branchDir + '/...') self.assertEqual(len(result), len(files), "Not all files branched") except P4.P4Exception: self.fail("Integration failed") change = self.p4.fetch_change() change._description = "My Branch Test" self._doSubmit("Failed to submit branch", change) # branch testing again branchDir = 'test_branch2' try: result = self.p4.run_integ(testDir + '/...', branchDir + '/...') self.assertEqual(len(result), len(files), "Not all files branched") except P4.P4Exception: self.fail("Integration failed") change = self.p4.fetch_change() change._description = "My Branch Test" self._doSubmit("Failed to submit branch", change) # filelog checks filelogs = self.p4.run_filelog( testDir + '/...' ) self.assertEqual( len(filelogs), len(files) ) df = filelogs[0] self.assertEqual( df.depotFile, "//depot/test_files/bar.txt", "Unexpected file in the filelog" ) self.assertEqual( len(df.revisions), 2, "Unexpected number of revisions" ) rev = df.revisions[0] self.assertEqual( rev.rev, 2, "Unexpected revision") self.assertEqual( len(rev.integrations), 2, "Unexpected number of integrations") self.assertEqual( rev.integrations[ 0 ].how, "branch into", "Unexpected how" ) self.assertEqual( rev.integrations[ 0 ].file, "//depot/test_branch/bar.txt", "Unexpected target file" ) if __name__ == '__main__': unittest.main()