From 10b98b82e80932a38e6edc44eb5b555375670fac Mon Sep 17 00:00:00 2001 From: Martin Hawlisch Date: Fri, 14 Oct 2005 20:53:50 +0000 Subject: [PATCH] * src/plugins/TestcaseGenerator.py: Add unicode test svn: r5322 --- gramps2/ChangeLog | 3 +- gramps2/src/plugins/TestcaseGenerator.py | 231 ++++++++++++++++------- 2 files changed, 164 insertions(+), 70 deletions(-) diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index d431c2bae..d064542be 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -6,7 +6,8 @@ * src/ImageSelect.py (LocalMediaProperties): Support selection. 2005-10-14 Martin Hawlisch - * src/plugins/TestcaseGenerator.py: Randomize SourceRefs + * src/plugins/TestcaseGenerator.py: Randomize SourceRefs; + Add unicode test 2005-10-14 Julio Sanchez * src/ChooseParents.py: give unknown sex to the new parent, so that diff --git a/gramps2/src/plugins/TestcaseGenerator.py b/gramps2/src/plugins/TestcaseGenerator.py index 8c45e1787..bb4ef7100 100644 --- a/gramps2/src/plugins/TestcaseGenerator.py +++ b/gramps2/src/plugins/TestcaseGenerator.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # # Gramps - a GTK+/GNOME based genealogy program # @@ -60,6 +61,14 @@ from DateHandler import displayer as _dd # #------------------------------------------------------------------------- class TestcaseGenerator(Tool.Tool): + NUMERIC = 0 + FIRSTNAME = 1 + FIRSTNAME_FEMALE = 2 + FIRSTNAME_MALE = 3 + LASTNAME = 4 + NOTE = 5 + SHORT = 6 + LONG = 7 def __init__(self,db,person,options_class,name,callback=None,parent=None): if db.readonly: @@ -309,51 +318,64 @@ class TestcaseGenerator(Tool.Tool): self.default_url = RelLib.Url() self.default_url.set_path("http://www.gramps-project.org/") - self.default_url.set_description("GRAMPS Project Homepage") + self.default_url.set_description( self.rand_text(self.SHORT)) self.default_source = RelLib.Source() - self.default_source.set_title("TestcaseGenerator") - self.default_source.set_author("GRAMPS") - self.default_source.set_publication_info("Randomly generated. No real data.") - self.default_source.set_abbreviation("Gramps T.G.") - self.default_source.set_note("Generated by TestcaseGenerator") - self.default_source.set_data_item("Testcase Attribute", "Value test") + self.default_source.set_title( self.rand_text(self.SHORT)) + self.default_source.set_author( self.rand_text(self.SHORT)) + self.default_source.set_publication_info( self.rand_text(self.LONG)) + self.default_source.set_abbreviation( self.rand_text(self.SHORT)) + self.default_source.set_note( self.rand_text(self.NOTE)) + self.default_source.set_data_item( self.rand_text(self.SHORT), self.rand_text(self.SHORT)) self.db.add_source(self.default_source, self.trans) self.generated_sources.append( self.default_source.get_handle()) self.default_attribute = RelLib.Attribute() - self.default_attribute.set_type("Testcase Attribute") - self.default_attribute.set_value("Value test") - self.default_attribute.set_note("Generated by TestcaseGenerator") + self.default_attribute.set_type( self.rand_text(self.SHORT)) + self.default_attribute.set_value( self.rand_text(self.SHORT)) + self.default_attribute.set_note( self.rand_text(self.NOTE)) self.default_attribute.add_source_reference( self.rand_sourceref()) + (y,d) = self.rand_date() self.default_media = RelLib.MediaObject() - self.default_media.set_description("TestcaseGenerator media") + self.default_media.set_description( self.rand_text(self.SHORT)) self.default_media.set_path("/tmp/TestcaseGenerator.png") self.default_media.set_mime_type("image/png") - self.default_media.set_note("Generated by TestcaseGenerator") + self.default_media.set_note( self.rand_text(self.NOTE)) + self.default_media.set_date_object(d) self.default_media.add_source_reference( self.rand_sourceref()) self.default_media.add_attribute(self.default_attribute) self.db.add_object(self.default_media, self.trans) self.default_mediaref = RelLib.MediaRef() self.default_mediaref.set_reference_handle(self.default_media.get_handle()) - self.default_mediaref.set_note("Generated by TestcaseGenerator") + self.default_mediaref.set_note( self.rand_text(self.NOTE)) self.default_mediaref.add_source_reference( self.rand_sourceref()) self.default_mediaref.add_attribute(self.default_attribute) self.default_source.add_media_reference(self.default_mediaref) self.db.commit_source(self.default_source, self.trans) + loc = RelLib.Location() + loc.set_city( self.rand_text(self.SHORT)) + loc.set_postal_code( self.rand_text(self.SHORT)) + loc.set_phone( self.rand_text(self.SHORT)) + loc.set_parish( self.rand_text(self.SHORT)) + loc.set_county( self.rand_text(self.SHORT)) + loc.set_state( self.rand_text(self.SHORT)) + loc.set_country( self.rand_text(self.SHORT)) self.default_place = RelLib.Place() - self.default_place.set_title("TestcaseGenerator place") - self.default_place.set_note("Generated by TestcaseGenerator") + self.default_place.set_main_location( loc) + self.default_place.set_title( self.rand_text(self.SHORT)) + self.default_place.set_note( self.rand_text(self.NOTE)) + self.default_place.set_longitude( self.rand_text(self.SHORT)) + self.default_place.set_latitude( self.rand_text(self.SHORT)) self.default_place.add_source_reference( self.rand_sourceref()) self.default_place.add_media_reference(self.default_mediaref) self.default_place.add_url(self.default_url) self.db.add_place(self.default_place, self.trans) self.default_address = RelLib.Address() - self.default_address.set_street("Teststreet") - self.default_address.set_phone("012 34 56 78") - self.default_address.set_city("Testcity") - self.default_address.set_state("Teststate") - self.default_address.set_country("Testcountry") - self.default_address.set_postal_code("12345") - self.default_address.set_note("Generated by TestcaseGenerator") + self.default_address.set_street( self.rand_text(self.SHORT)) + self.default_address.set_phone( self.rand_text(self.SHORT)) + self.default_address.set_city( self.rand_text(self.SHORT)) + self.default_address.set_state( self.rand_text(self.SHORT)) + self.default_address.set_country( self.rand_text(self.SHORT)) + self.default_address.set_postal_code( self.rand_text(self.SHORT)) + self.default_address.set_note( self.rand_text(self.NOTE)) self.default_address.add_source_reference( self.rand_sourceref()) if self.options.handler.options_dict['bugs']: @@ -767,7 +789,7 @@ class TestcaseGenerator(Tool.Tool): name.set_first_name(firstname) name.set_surname(lastname) name.add_source_reference( self.rand_sourceref()) - name.set_note("Generated by TestcaseGenerator") + name.set_note( self.rand_text(self.NOTE)) np.set_primary_name(name) # generate some slightly different alternate name @@ -776,12 +798,12 @@ class TestcaseGenerator(Tool.Tool): firstname2 = firstname.replace("m", "n").replace("l", "i").replace("b", "d") if firstname2 != firstname: alt_name.set_first_name( firstname2) - alt_name.set_title( "Testtitle") - alt_name.set_patronymic( "Testpatronymic") - alt_name.set_surname_prefix( "van") - alt_name.set_suffix( "the second") + alt_name.set_title( self.rand_text(self.SHORT)) + alt_name.set_patronymic( self.rand_text(self.FIRSTNAME_MALE)) + alt_name.set_surname_prefix( self.rand_text(self.SHORT)) + alt_name.set_suffix( self.rand_text(self.SHORT)) alt_name.add_source_reference( self.rand_sourceref()) - alt_name.set_note("Generated by TestcaseGenerator") + alt_name.set_note( self.rand_text(self.NOTE)) np.add_alternate_name( alt_name) if not alive_in_year: @@ -956,10 +978,10 @@ class TestcaseGenerator(Tool.Tool): object.add_media_reference(self.default_mediaref) e = RelLib.Event() e.set_privacy( randint(0,5) == 1) - e.set_name("TestcaseGenerator") - e.set_note("Generated by TestcaseGenerator") - e.set_cause("Test cause") - e.set_description("Test description") + e.set_name( self.rand_text(self.SHORT)) + e.set_note( self.rand_text(self.NOTE)) + e.set_cause( self.rand_text(self.SHORT)) + e.set_description( self.rand_text(self.SHORT)) e.add_source_reference( self.rand_sourceref()) mref = RelLib.MediaRef(self.default_mediaref) mref.set_privacy( randint(0,5) == 1) @@ -981,37 +1003,17 @@ class TestcaseGenerator(Tool.Tool): object.add_address(addr) except AttributeError: pass # family does not have an url - object.set_note("Generated by TestcaseGenerator") + object.set_note( self.rand_text(self.NOTE)) def rand_name( self, lastname=None, gender=None): - syllables1 = ["sa","li","na","ma","no","re","mi","cha","ki","du","ba","ku","el"] - syllables2 = ["as","il","an","am","on","er","im","ach","ik","ud","ab","ul","le"] - - firstname = "" - if not gender: - gender = choice((RelLib.Person.MALE, RelLib.Person.FEMALE)) - maxnames = 5 - maxsyllables = 5 - if not self.options.handler.options_dict['long_names']: - maxnames = 2 - maxsyllables = 3 - for i in range(0,randint(1,maxnames)): - for j in range(0,randint(2,maxsyllables)): - firstname = firstname + choice(syllables2) - if gender == RelLib.Person.FEMALE: - firstname = firstname + choice(("a","e","i","o","u")) - firstname = firstname + " " - firstname = firstname.title().strip() + if gender == RelLib.Person.MALE: + firstname = self.rand_text( self.FIRSTNAME_MALE) + elif gender == RelLib.Person.FEMALE: + firstname = self.rand_text( self.FIRSTNAME_FEMALE) + else: + firstname = self.rand_text( self.FIRSTNAME) if not lastname: - lastname = "" - for i in range(0,randint(2,maxsyllables)): - lastname = lastname + choice(syllables1) - n = randint(0,2) - if n == 0: - lastname = lastname.title() - elif n == 1: - lastname = lastname.upper() - + lastname = self.rand_text( self.LASTNAME) return (firstname,lastname) def rand_date( self, start=None, end=None): @@ -1029,7 +1031,7 @@ class TestcaseGenerator(Tool.Tool): ndate = Date.Date() if randint(0,10) == 1: # Some get a textual date - ndate.set_as_text( choice(("Unknown","??","Don't know","TODO!"))) + ndate.set_as_text( choice((self.rand_text(self.SHORT),"Unknown","??","Don't know","TODO!"))) else: if randint(0,10) == 1: # some get an empty date @@ -1066,11 +1068,11 @@ class TestcaseGenerator(Tool.Tool): type = choice( ("Census", "Degree", "Emigration", "Immigration")) e.set_name( type) if randint(0,1) == 1: - e.set_note("Generated by TestcaseGenerator") + e.set_note( self.rand_text(self.NOTE)) if randint(0,1) == 1: - e.set_cause("Test cause") + e.set_cause( self.rand_text(self.SHORT)) if randint(0,1) == 1: - e.set_description("Test description") + e.set_description( self.rand_text(self.LONG)) if randint(0,1) == 1: e.add_source_reference( self.rand_sourceref()) if randint(0,1) == 1: @@ -1084,7 +1086,7 @@ class TestcaseGenerator(Tool.Tool): if randint(0,5) == 1: w = RelLib.Witness() w.set_privacy( randint(0,5) == 1) - w.set_comment("Generated by TestcaseGenerator") + w.set_comment( self.rand_text(self.NOTE)) if randint(0,1) == 1: w.set_type( RelLib.Event.ID) wph = self.generate_person( alive_in_year=year) @@ -1106,7 +1108,7 @@ class TestcaseGenerator(Tool.Tool): if randint(0,1) == 1: lds.add_source_reference( self.rand_sourceref()) if randint(0,1) == 1: - lds.set_note("Generated by TestcaseGenerator") + lds.set_note( self.rand_text(self.NOTE)) if randint(0,1) == 1: (year,d) = self.rand_date( ) lds.set_date_object( d) @@ -1116,11 +1118,11 @@ class TestcaseGenerator(Tool.Tool): sref = RelLib.SourceRef() sref.set_base_handle( choice( self.generated_sources)) if randint(0,1) == 1: - sref.set_page( "%d, %d" % (randint(2,100), randint(101,500))) + sref.set_page( self.rand_text(self.NUMERIC)) if randint(0,1) == 1: - sref.set_text("Test 1 test 2 test 3 test 4") + sref.set_text( self.rand_text(self.SHORT)) if randint(0,1) == 1: - sref.set_note("This is a test only.") + sref.set_note( self.rand_text(self.NOTE)) sref.set_privacy( randint(0,5) == 1) if randint(0,1) == 1: (year, d) = self.rand_date( ) @@ -1128,6 +1130,97 @@ class TestcaseGenerator(Tool.Tool): sref.set_confidence_level( choice( self.random_confidence_list)) return sref + def rand_text(self, type=None): + # for lastnamesnames + syllables1 = ["sa","li","na","ma","no","re","mi","cha","ki","du","ba","ku","el"] + # for firstnames + syllables2 = ["as","il","an","am","on","er","im","ach","ik","ud","ab","ul","le"] + # others + syllables3 = ["ka", "po", "lo", "chi", "she", "di", "fa", "go", "ja", "ne", "pe"] + + syllables = syllables1 + syllables2 +syllables3 + minwords = 5 + maxwords = 8 + minsyllables = 2 + maxsyllables = 5 + + result = u"ä<ö&ü%ß" + + if not type: + type = self.SHORT + + if type == self.SHORT: + minwords = 1 + maxwords = 3 + minsyllables = 2 + maxsyllables = 4 + + if type == self.LONG: + minwords = 5 + maxwords = 8 + minsyllables = 2 + maxsyllables = 5 + + if type == self.FIRSTNAME: + type = choice( (self.FIRSTNAME_MALE,self.FIRSTNAME_FEMALE)) + + if type == self.FIRSTNAME_MALE or type == self.FIRSTNAME_FEMALE: + syllables = syllables2 + minwords = 1 + maxwords = 5 + minsyllables = 2 + maxsyllables = 5 + if not self.options.handler.options_dict['long_names']: + maxwords = 2 + maxsyllables = 3 + + if type == self.LASTNAME: + syllables = syllables1 + minwords = 1 + maxwords = 1 + minsyllables = 2 + maxsyllables = 5 + if not self.options.handler.options_dict['long_names']: + maxsyllables = 3 + + if type == self.NOTE: + result = result + "Geberated by TestcaseGenerator." + minwords = 20 + maxwords = 100 + + if type == self.NUMERIC: + if randint(0,1) == 1: + return "%d %s" % (randint(1,100), result) + if randint(0,1) == 1: + return "%d, %d %s" % (randint(1,100), randint(100,1000), result) + m = randint(100,1000) + return "%d - %d %s" % (m, m+randint(1,5), result) + + for i in range(0,randint(minwords,maxwords)): + if result: + result = result + " " + word = "" + for j in range(0,randint(minsyllables,maxsyllables)): + word = word + choice(syllables) + if type == self.FIRSTNAME_MALE: + word = word + choice(("a","e","i","o","u")) + elif type == self.NOTE: + if randint(0,20) == 1: + word = word + "." + elif randint(0,30) == 1: + word = word + ".\n" + if randint(0,3) == 1: + word = word.title() + result = result + word + + if type == self.LASTNAME: + n = randint(0,2) + if n == 0: + result = result.title() + elif n == 1: + result = result.upper() + + return result def commit_transaction(self): if self.options.handler.options_dict['no_trans']: