# Perforce Defect Tracking Integration Project # # # TEST_TRANSLATOR.PY -- UNIT TEST FOR THE KEYWORD TRANSLATOR # # Gareth Rees, Ravenbrook Limited, 2001-03-13 # # # 1. INTRODUCTION # # This module defines a unit test for the keyword_translator class. # # It uses the PyUnit unit test framework [PyUnit]. # # The intended readership is project developers. # # This document is not confidential. import os import sys p4dti_path = os.path.join(os.getcwd(), os.pardir, 'code', 'replicator') if p4dti_path not in sys.path: sys.path.append(p4dti_path) import p4dti_unittest import string import translator import unittest kt = translator.keyword_translator() # 2. TEST CASES # 2.1. Single characters in the defect tracker # # Test that all single characters are unchanged when translated from the defect # tracker to Perforce and back again. class dtchar(p4dti_unittest.TestCase): def runTest(self): "Single characters in the defect tracker (test_translator.dtchar)" for i in range(256): a = chr(i) b = kt.translate_0_to_1(a) c = kt.translate_1_to_0(b) if c != a: self.addFailure("Character %d failure: %s -> %s -> %s" % (i,a,b,c)) # 2.2. Characters in Perforce # # Test that legal keyword characters (except backslash) in Perforce are # unchanged when translated to the defect tracker and back again. # # Perforce job field names can't contain whitespace, hashes, or double quotes. # Values in "select" fields in Perforce jobspecs also can't contain semicolons # or slashes. class p4char(p4dti_unittest.TestCase): def runTest(self): "Characters in Perforce (test_translator.p4char)" for i in range(256): a = chr(i) if (a not in string.whitespace and a not in '#";/\\'): b = kt.translate_1_to_0(a) c = kt.translate_0_to_1(b) if c != a: self.addFailure("Character %d failure: %s -> %s -> %s" % (i,a,b,c)) # 2.3. Strings in the defect tracker # # Test that a collection of miscellaneous strings are unchanged when translated # from the defect tracker to Perforce and back again. class dtstring(p4dti_unittest.TestCase): strings = [ 'the quick brown fox jumps over the lazy dog', '4_1_1_RELEASE', '\\TeX', '(a;b;c)', '"quote"', 'à la recherche du temps perdu', "Æsop's fables", "Ernesto Cesàro, Pál Erdös, Øystein Ore, Muhammad ibn Mûsâ al-Khwârizmî", 'Windows 3.1', 'HP-UX', 'OSF/1', '###urgent###', ] def runTest(self): "Strings in the defect tracker (test_translator.dtstring)" for a in self.strings: b = kt.translate_0_to_1(a) c = kt.translate_1_to_0(b) if c != a: self.addFailure("String failure: %s -> %s -> %s" % (a,b,c)) # 3. RUNNING THE TESTS def tests(): suite = unittest.TestSuite() for t in [dtchar, dtstring, p4char]: suite.addTest(t()) return suite if __name__ == "__main__": unittest.main(defaultTest="tests") # A. REFERENCES # # [PyUnit] "PyUnit - a unit testing framework for Python"; Steve Purcell; # . # # # B. DOCUMENT HISTORY # # 2001-03-13 GDR Created. # # 2001-04-24 GDR Use p4dti_unittest to collect many failures per test case. # # # C. COPYRIGHT AND LICENCE # # This file is copyright (c) 2001 Perforce Software, Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # # $Id: //info.ravenbrook.com/project/p4dti/branch/2001-11-05/nt-service/test/test_translator.py#1 $