testUtils.py :  » Issue-Tracker » IssueTracker » IssueTrackerProduct » tests » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Issue Tracker » IssueTracker 
IssueTracker » IssueTrackerProduct » tests » testUtils.py
import unittest

import sys, os
if __name__ == '__main__':
    execfile(os.path.join(sys.path[0], 'framework.py'))
        

from Products.IssueTrackerProduct import Utils
from DateTime import DateTime

class IssueLinkFinderTestCase(unittest.TestCase):
    
    def _find(self, text, zfill, trackerid=None, prefix=None):
        c = Utils.getFindIssueLinksRegex(zfill, trackerid, prefix)
        return c.findall(text)
        
    def testBasic(self):
        t='This is #1234 issue'
        self.assertEqual(self._find(t, 4), ['#1234'])
        
    def testBasicMultiple(self):
        t='This is #1234 issues #5421 test'
        self.assertEqual(self._find(t, 4), ['#1234', '#5421'])
        
    def testWithTrackerid(self):
        t='Remember Real#1234? or #9876 but not Demo#2468 or then:#1235'
        self.assertEqual(self._find(t, 4, 'real'), ['Real#1234', '#9876','#1235'])

    def testWithTrackerid2(self):
        t='Remember Real#1234? or #9876 but not Demo#2468 or then:#1235'
        self.assertEqual(self._find(t, 4, 'DEMO'), ['#9876','Demo#2468','#1235'])

    def testPrefixed(self):
        t='prefixed with 000- is #000-0103 but not Real#000-0104'
        self.assertEqual(self._find(t, 4, prefix='000-'), ['#000-0103'])
        
    def testPrefixedWithTrackerid(self):
        t='prefixed with 000- is #000-0103 but not Real#000-0104'
        self.assertEqual(self._find(t, 4, 'real', prefix='000-'), 
                         ['#000-0103','Real#000-0104'])
                         
    def testWithBracketsNoTrackerid(self):
        t='In brackets (#1234) with tracker id demo like (demo#0987)'
        self.assertEqual(self._find(t, 4), ['#1234'])
        
    def testWithBracketsWithTrackerid(self):
        t='In brackets (#1234) with tracker id demo like (demo#0987)'
        self.assertEqual(self._find(t, 4, 'DeMo'), ['#1234','demo#0987'])
        
    def testLinebroken(self):
        t = 'First there is #00000\nThen there is #99999'
        self.assertEqual(self._find(t, 5, ''), ['#00000', '#99999'])
        
    def testStringstart(self):
        t = '#111 or (#113) or (Real#115) but not (#1122) or (Real#8888) or (OReal#116)'
        self.assertEqual(self._find(t, 3, 'real'), ['#111','#113','Real#115'])
        
    def testWithTrackeridS(self):
        t='Theres Real#1234 and theres Demo#1235'
        self.assertEqual(self._find(t, 4, ('DeMo','real')), 
                         ['Real#1234', 'Demo#1235'])


class TimeSinceTestCase(unittest.TestCase):
    
    def testYears1A(self):
        t1 = DateTime('2005/01/01')
        # 2004 was a leap year
        t2 = DateTime('2003/01/01')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 years and 1 day")

    def testYears1B(self):
        t1 = DateTime('2004/01/01')
        t2 = DateTime('2002/01/01')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 years")
        
    def testYears2A(self):
        t1 = DateTime('2005/01/01')
        # 2004 was a leap year
        t2 = DateTime('2003/01/02')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 years")
        
    def testYears2B(self):
        t1 = DateTime('2004/01/02')
        t2 = DateTime('2002/01/01')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 years and 1 day")
        
    def testYears3A(self):
        t1 = DateTime('2005/02/01')
        # 2004 was a leap year
        t2 = DateTime('2003/01/01')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 years and 1 month and 2 days")
        
    def testYears3B(self):
        t1 = DateTime('2004/02/01')
        # 2004 was a leap year
        t2 = DateTime('2002/01/01')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 years and 1 month and 1 day")
        
    def testMonths(self):
        t1 = DateTime('2005/04/01')
        t2 = DateTime('2005/05/01')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "1 month")
        
    def testDays1(self):
        t1 = DateTime('2005/04/01')
        t2 = DateTime('2005/04/02')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "1 day")

    def testDays2(self):
        t1 = DateTime('2005/04/01')
        t2 = DateTime('2005/04/03')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 days")
        
        
    def testHours1(self):
        t1 = DateTime('2005/04/01 12:00')
        t2 = DateTime('2005/04/01 13:00')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "1 hour")
        
    def testHours2(self):
        t1 = DateTime('2005/04/01 12:00')
        t2 = DateTime('2005/04/01 14:00')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 hours")
        
    def testHours3(self):
        # the timeSince() function drops the hour
        # part if the difference is in days
        t1 = DateTime('2005/04/01 12:00')
        t2 = DateTime('2005/04/02 14:00')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "1 day")
        
    def testMinutes1(self):
        # the timeSince() function drops the hour
        # part if the difference is in days
        t1 = DateTime('2005/04/01 12:00')
        t2 = DateTime('2005/04/01 12:30')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, 0)
        
    def testMinutes2(self):
        # the timeSince() function drops the hour
        # part if the difference is in days
        t1 = DateTime('2005/04/01 12:00')
        t2 = DateTime('2005/04/01 12:30')
        difference = Utils.timeSince(t1, t2, minute_granularity=1)
        self.assertEqual(difference, "30 minutes")
        
    def testMinutes2(self):
        # the timeSince() function drops the hour
        # part if the difference is in days
        t1 = DateTime('2005/04/01 12:00')
        t2 = DateTime('2005/04/01 12:01')
        difference = Utils.timeSince(t1, t2, minute_granularity=1)
        self.assertEqual(difference, "1 minute")
        
    def testWeek1(self):
        # use the week notation
        t1 = DateTime('2005/04/01')
        t2 = DateTime('2005/04/08')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "1 week")
        
    def testWeek2(self):
        # use the week notation
        t1 = DateTime('2005/04/01')
        t2 = DateTime('2005/04/15')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 weeks")
        
    def testWeek2point1(self):
        # use the week notation
        t1 = DateTime('2005/04/01')
        t2 = DateTime('2005/04/16')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "2 weeks and 1 day")
        
    def testWeek3(self):
        # use the week notation
        t1 = DateTime('2005/04/01')
        t2 = DateTime('2005/04/22')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, "3 weeks")
        
    def test2Weeks(self):
        # use the week notation
        t1 = DateTime('2005/12/08 15:54:18.715 GMT')
        t2 = DateTime('2006/01/06 10:26:18.571 GMT')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, '4 weeks')
        
    def test2Weeks(self):
        # use the week notation
        t1 = DateTime('2005/11/12 00:08:30.937 GMT')
        t2 = DateTime('2006/01/09 09:47:07.123 GMT')
        difference = Utils.timeSince(t1, t2)
        self.assertEqual(difference, '1 month and 4 weeks')
        
    def testLongDistanceDates(self):
        # If the result contains a year part, month part, week part
        # and day part the number of parts is controlled by
        # @max_no_sections (default 3)
        t1 = DateTime('2004/11/12 00:08:30.937 GMT')
        t2 = DateTime('2006/05/01 09:47:07.123 GMT')
        difference_default = Utils.timeSince(t1, t2)
        self.assertEqual(difference_default, '1 year and 5 months and 2 weeks')
        
        difference_2_parts = Utils.timeSince(t1, t2, max_no_sections=2)
        self.assertEqual(difference_2_parts, '1 year and 5 months')

        difference_99_parts = Utils.timeSince(t1, t2, max_no_sections=99)
        self.assertEqual(difference_99_parts, '1 year and 5 months and 2 weeks and 6 days')
        
        
class SplitTermsTestCase(unittest.TestCase):
    
    def testBasic1(self):
        inp = "peter anders bengt"
        exp = ['peter','anders','bengt']
        self.assertEqual(Utils.splitTerms(inp), exp)
        
    def testUnbalanced(self):
        inp = 'peter "bengt anders bengtsson'
        exp = ['peter','"bengt','anders','bengtsson']
        self.assertEqual(Utils.splitTerms(inp), exp)
        
    def testOneQuote(self):
        inp = 'peter "bengt anders" bengtsson'
        exp = ['peter','"bengt anders"','bengtsson']
        self.assertEqual(Utils.splitTerms(inp), exp)
        
    def testTwoQuotes(self):
        inp = 'peter "bengt anders" bengtsson "and again" peter'
        exp = ['peter','"bengt anders"','bengtsson',
               '"and again"','peter']
        self.assertEqual(Utils.splitTerms(inp), exp)
        
    def testEndingQuote(self):
        inp = 'peter "bengt anders"'
        exp = ['peter','"bengt anders"']
        self.assertEqual(Utils.splitTerms(inp), exp)
        
    def testStartingQuote(self):
        inp = '"bengt anders" bengtsson'
        exp = ['"bengt anders"','bengtsson']
        self.assertEqual(Utils.splitTerms(inp), exp)        
        

class AddParam2URLTestCase(unittest.TestCase):
    
    def testBasic(self):
        inpu, inpp = "http://www.com", {'msg':'foo bar'}
        exp = "http://www.com?msg=foo%20bar"
        self.assertEqual(Utils.AddParam2URL(inpu, inpp), exp)
        
    def testBasicPlus(self):
        inpu, inpp = "http://www.com", {'msg':'foo bar'}
        exp = "http://www.com?msg=foo+bar"
        self.assertEqual(Utils.AddParam2URL(inpu, inpp, plus_quote=1), exp)
        

class StandaloneWordRegex(unittest.TestCase):
    
    def _find(self, word, text):
        return Utils.createStandaloneWordRegex(word).findall(text)
    
    def testOneAgainstOne(self):
        word = "peter"
        text = "Peter"
        exp = ['Peter']
        self.assertEqual(self._find(word, text), exp)
    
    def testOneAgainstSentence(self):
        word = "peter"
        text = "Peter Bengtsson"
        exp = ['Peter']
        self.assertEqual(self._find(word, text), exp)
        
    def testSentenceAgainstOne(self):
        word = "Peter Bengtsson"
        text = "peter"
        exp = []
        self.assertEqual(self._find(word, text), exp)
        
    def testSentenceAgainstSentenceI(self):
        word = "Peter Bengtsson"
        text = "Peter Bengtsson"
        exp = [text]
        self.assertEqual(self._find(word, text), exp)
        
    def testSentenceAgainstSentenceII(self):
        word = "PETER BENGTSSON"
        text = "peter bengtsson"
        exp = ['peter bengtsson']
        self.assertEqual(self._find(word, text), exp)
        
    def testFred(self):
        word = 'Fred Damberger'
        text = 'Fred Damberger'
        exp = [text]
        self.assertEqual(self._find(word, text), exp)
        
        
class ValidEmailAddressTestCase(unittest.TestCase):
    
    def testPositives(self):
        T = lambda email: self.assertEqual(Utils.ValidEmailAddress(email), True)
        T('peter@fry-it.com')
        T(u'peter@fry-it.com')
        T('peter+julika@peterbe.com')
        T("peter'julika@peterbe.com")
        T('o.k@foo.com')
        T('ok@911.com')
        
    def testNegatives(self):
        F = lambda email: self.assertEqual(Utils.ValidEmailAddress(email), False)
        F('ASD@GHJG.7')
        F('peter @fry-it.com')
        F('invalid@foo.c0m')
        F(u'invalid@foo.c0m')
        F('invalid@foo.b@r.com')
        F('invalid@f#o.com')
        F('invalid.@foo.com')
        F('invalid@foo.')
        

class UnicodifyAsciifyStrings(unittest.TestCase):
    
    def test_unicodify(self):
        """ unicodify turns any string into unicode """
        func = Utils.unicodify
        
        # ascii to unicode
        s = 'ok'
        self.assertEqual(func(s), u'ok')
        self.assertTrue(isinstance(func(s), unicode))
        
        # unicode to unicode
        s = u'ok'
        self.assertEqual(func(s), u'ok')
        self.assertTrue(isinstance(func(s), unicode))
        
        # ascii with unicode within
        s = '\xa3'
        self.assertEqual(func(s), u'\xa3')
        self.assertTrue(isinstance(func(s), unicode))
        
        # unicode with unicode within
        s = u'\xa3'
        self.assertEqual(func(s), u'\xa3')
        self.assertTrue(isinstance(func(s), unicode))
        

    def test_asciify(self):
        """ asciify turns any string into an ascii string """
        func = Utils.asciify
        
        # ascii to ascii
        s = 'ok'
        self.assertEqual(func(s), 'ok')
        self.assertTrue(isinstance(func(s), str))
        
        # unicode to ascii
        s = u'ok'
        self.assertEqual(func(s), 'ok')
        self.assertTrue(isinstance(func(s), str))
        
        # uncode with unicode characters in it
        s = u'\xa3'
        # since default error hander is 'xmlcharrefreplace'
        self.assertEqual(func(s), '£')
        self.assertEqual(func(s, 'replace'), '?')
        self.assertEqual(func(s, 'ignore'), '')
        self.assertTrue(isinstance(func(s), str))
        
        # ascii with unicode in it
        s = '\xa3'
        # since default error hander is 'xmlcharrefreplace'
        self.assertEqual(func(s), '£')
        self.assertEqual(func(s, 'replace'), '?')
        self.assertEqual(func(s, 'ignore'), '')
        self.assertTrue(isinstance(func(s), str))
        

class MiscTestCase(unittest.TestCase):
    
    def test_merge_changes(self):
        """ _mergeChanges(old_change, new_change) is part of the detail changing
        code that takes two changes and finds a best merge between them.
        """
        old_change = {'urgency': {'old':'low', 'new':'medium'},
                      'type': {'old':'bug', 'new':'feature'},
                      'age': {'old':10, 'new': 12},
                      }
                      
        new_change = {'urgency': {'old':'medium', 'new':'high'},
                      'sections': {'old':['Foo'], 'new':['Bar']},
                      'age': {'old':12, 'new':10},
                      }
                      
        expected_result =\
            {'urgency': {'old':'low', 'new':'high'},
             'type': {'old':'bug', 'new':'feature'},
             'sections': {'old':['Foo'], 'new':['Bar']},
            }
                      
        func = Utils.merge_changes
        result = func(old_change, new_change)
        self.assertEqual(result, expected_result)
        

        
def test_suite():
    from unittest import TestSuite,makeSuite
    suite = TestSuite()
    suite.addTest(makeSuite(IssueLinkFinderTestCase))
    suite.addTest(makeSuite(TimeSinceTestCase))
    suite.addTest(makeSuite(SplitTermsTestCase))
    suite.addTest(makeSuite(AddParam2URLTestCase))
    suite.addTest(makeSuite(StandaloneWordRegex))
    suite.addTest(makeSuite(ValidEmailAddressTestCase))
    suite.addTest(makeSuite(UnicodifyAsciifyStrings))
    suite.addTest(makeSuite(MiscTestCase))
    
    return suite
    
if __name__ == '__main__':
    framework()
        

www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.