* src/plugins/TestcaseGenerator.py: Add unicode test
svn: r5322
This commit is contained in:
@@ -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
|
||||
|
@@ -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']:
|
||||
|
Reference in New Issue
Block a user