* src/plugins/TestcaseGenerator.py: Add unicode test

svn: r5322
This commit is contained in:
Martin Hawlisch
2005-10-14 20:53:50 +00:00
parent b37fb2d07d
commit 10b98b82e8
2 changed files with 164 additions and 70 deletions

View File

@@ -6,7 +6,8 @@
* src/ImageSelect.py (LocalMediaProperties): Support selection.
2005-10-14 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/plugins/TestcaseGenerator.py: Randomize SourceRefs
* src/plugins/TestcaseGenerator.py: Randomize SourceRefs;
Add unicode test
2005-10-14 Julio Sanchez <jsanchez@users.sourceforge.net>
* src/ChooseParents.py: give unknown sex to the new parent, so that

View File

@@ -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']: