In .:
2006-05-01 Alex Roitman <shura@gramps-project.org> * various: merge changes from gramps20. In po: 2006-05-01 Alex Roitman <shura@gramps-project.org> * POTFILES.in: Add new file. svn: r6504
This commit is contained in:
265
gramps2/src/date_test.py
Normal file
265
gramps2/src/date_test.py
Normal file
@@ -0,0 +1,265 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2000-2006 Martin Hawlisch, Donald N. Allingham
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
# $Id: date_test.py,v 1.1.2.5 2006/04/20 04:04:31 rshura Exp $
|
||||
|
||||
"""Testscript for date displayer/parser"""
|
||||
|
||||
|
||||
import os
|
||||
import sys
|
||||
import traceback
|
||||
import locale
|
||||
import gettext
|
||||
|
||||
import gtk
|
||||
|
||||
if os.environ.has_key("GRAMPSI18N"):
|
||||
loc = os.environ["GRAMPSI18N"]
|
||||
else:
|
||||
loc = "/usr/share/locale"
|
||||
|
||||
try:
|
||||
locale.setlocale(locale.LC_ALL,'C')
|
||||
locale.setlocale(locale.LC_ALL,'')
|
||||
except locale.Error:
|
||||
pass
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
gettext.textdomain("gramps")
|
||||
gettext.install("gramps",loc,unicode=1)
|
||||
|
||||
import DateHandler
|
||||
from DateHandler import parser as _dp
|
||||
from DateHandler import displayer as _dd
|
||||
import Date
|
||||
|
||||
print locale.getlocale(locale.LC_TIME)
|
||||
print _dd
|
||||
print _dp
|
||||
print
|
||||
|
||||
date_tests = {}
|
||||
|
||||
# first the "basics".
|
||||
testset = "basic test"
|
||||
dates = []
|
||||
calendar = Date.CAL_GREGORIAN
|
||||
for quality in (Date.QUAL_NONE, Date.QUAL_ESTIMATED, Date.QUAL_CALCULATED):
|
||||
for modifier in (Date.MOD_NONE, Date.MOD_BEFORE, Date.MOD_AFTER, Date.MOD_ABOUT):
|
||||
for month in range(1,13):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,month,1789,False),"Text comment")
|
||||
dates.append( d)
|
||||
for modifier in (Date.MOD_RANGE, Date.MOD_SPAN):
|
||||
for month1 in range(1,13):
|
||||
for month2 in range(1,13):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,month1,1789,False,5,month2,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
modifier = Date.MOD_TEXTONLY
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,Date.EMPTY,"This is a textual date")
|
||||
dates.append( d)
|
||||
date_tests[testset] = dates
|
||||
|
||||
# incomplete dates (day or month missing)
|
||||
testset = "partial date"
|
||||
dates = []
|
||||
calendar = Date.CAL_GREGORIAN
|
||||
for quality in (Date.QUAL_NONE, Date.QUAL_ESTIMATED, Date.QUAL_CALCULATED):
|
||||
for modifier in (Date.MOD_NONE, Date.MOD_BEFORE, Date.MOD_AFTER, Date.MOD_ABOUT):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(0,11,1789,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(0,0,1789,False),"Text comment")
|
||||
dates.append( d)
|
||||
for modifier in (Date.MOD_RANGE, Date.MOD_SPAN):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,10,1789,False,0,11,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,10,1789,False,0,0,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(0,10,1789,False,5,11,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(0,10,1789,False,0,11,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(0,10,1789,False,0,0,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(0,0,1789,False,5,11,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(0,0,1789,False,0,11,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(0,0,1789,False,0,0,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
date_tests[testset] = dates
|
||||
|
||||
# slash-dates
|
||||
testset = "slash-dates"
|
||||
dates = []
|
||||
calendar = Date.CAL_GREGORIAN
|
||||
for quality in (Date.QUAL_NONE, Date.QUAL_ESTIMATED, Date.QUAL_CALCULATED):
|
||||
for modifier in (Date.MOD_NONE, Date.MOD_BEFORE, Date.MOD_AFTER, Date.MOD_ABOUT):
|
||||
# normal date
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,11,1789,True),"Text comment")
|
||||
dates.append( d)
|
||||
for modifier in (Date.MOD_RANGE, Date.MOD_SPAN):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,11,1789,True,5,10,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,11,1789,False,5,10,1876,True),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,11,1789,True,5,10,1876,True),"Text comment")
|
||||
dates.append( d)
|
||||
date_tests[testset] = dates
|
||||
|
||||
# BCE
|
||||
testset = "B. C. E."
|
||||
dates = []
|
||||
calendar = Date.CAL_GREGORIAN
|
||||
for quality in (Date.QUAL_NONE, Date.QUAL_ESTIMATED, Date.QUAL_CALCULATED):
|
||||
for modifier in (Date.MOD_NONE, Date.MOD_BEFORE, Date.MOD_AFTER, Date.MOD_ABOUT):
|
||||
# normal date
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,11,-90,False),"Text comment")
|
||||
dates.append( d)
|
||||
for modifier in (Date.MOD_RANGE, Date.MOD_SPAN):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(5,10,-90,False,4,11,-90,False),"Text comment")
|
||||
dates.append( d)
|
||||
d = Date.Date()
|
||||
date_tests[testset] = dates
|
||||
|
||||
# test for all other different calendars
|
||||
testset = "Non-gregorian"
|
||||
dates = []
|
||||
for calendar in (Date.CAL_JULIAN, Date.CAL_HEBREW, Date.CAL_ISLAMIC, Date.CAL_FRENCH, Date.CAL_PERSIAN):
|
||||
for quality in (Date.QUAL_NONE, Date.QUAL_ESTIMATED, Date.QUAL_CALCULATED):
|
||||
for modifier in (Date.MOD_NONE, Date.MOD_BEFORE, Date.MOD_AFTER, Date.MOD_ABOUT):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,11,1789,False),"Text comment")
|
||||
dates.append( d)
|
||||
for modifier in (Date.MOD_RANGE, Date.MOD_SPAN):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,10,1789,False,5,11,1876,False),"Text comment")
|
||||
dates.append( d)
|
||||
quality = Date.QUAL_NONE
|
||||
modifier = Date.MOD_NONE
|
||||
for calendar in (Date.CAL_JULIAN, Date.CAL_ISLAMIC, Date.CAL_PERSIAN):
|
||||
for month in range(1,13):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,month,1789,False),"Text comment")
|
||||
dates.append( d)
|
||||
for calendar in (Date.CAL_HEBREW, Date.CAL_FRENCH):
|
||||
for month in range(1,14):
|
||||
d = Date.Date()
|
||||
d.set(quality,modifier,calendar,(4,month,1789,False),"Text comment")
|
||||
dates.append( d)
|
||||
date_tests[testset] = dates
|
||||
|
||||
# now run the tests using all available date formats
|
||||
cal_str = [ "CAL_GREGORIAN", "CAL_JULIAN", "CAL_HEBREW", "CAL_FRENCH", "CAL_PERSIAN", "CAL_ISLAMIC"]
|
||||
mod_str = ["MOD_NONE", "MOD_BEFORE", "MOD_AFTER", "MOD_ABOUT", "MOD_RANGE", "MOD_SPAN", "MOD_TEXTONLY"]
|
||||
qua_str = ["QUAL_NONE", "QUAL_ESTIMATED", "QUAL_CALCULATED"]
|
||||
stats = {}
|
||||
formats = DateHandler.get_date_formats()
|
||||
for testset in date_tests.keys():
|
||||
print "\n##### %s:\n" % testset
|
||||
stats[testset] = [0,0,testset]
|
||||
for format in range( len( DateHandler.get_date_formats())):
|
||||
DateHandler.set_format(format)
|
||||
print "\n## %s:\n" % DateHandler.get_date_formats()[format]
|
||||
for dateval in date_tests[testset]:
|
||||
failed = True
|
||||
ex = None
|
||||
errmsg = ""
|
||||
datestr = None
|
||||
ndate = None
|
||||
ntxt = None
|
||||
if dateval.modifier != Date.MOD_TEXTONLY:
|
||||
dateval.text = "Comment. Format: %s" % DateHandler.get_date_formats()[format]
|
||||
try:
|
||||
datestr = _dd.display( dateval)
|
||||
try:
|
||||
ndate = _dp.parse( datestr)
|
||||
ntxt = _dd.display( ndate)
|
||||
if ndate:
|
||||
if dateval.is_equal( ndate):
|
||||
failed = False
|
||||
else:
|
||||
if dateval.modifier != Date.MOD_TEXTONLY and ndate.modifier == Date.MOD_TEXTONLY:
|
||||
errmsg = "FAILED! (was parsed as text)"
|
||||
else:
|
||||
errmsg = "FAILED!"
|
||||
else:
|
||||
errmsg = "FAILED: DateParser returned no Date"
|
||||
except:
|
||||
ex = "Parser"
|
||||
errmsg = "FAILED: DateParser Exception %s" % ("".join(traceback.format_exception(*sys.exc_info())),)
|
||||
except:
|
||||
ex = "Display"
|
||||
errmsg = "FAILED: DateDisplay Exception: %s" % ("".join(traceback.format_exception(*sys.exc_info())),)
|
||||
if not failed:
|
||||
stats[testset][1] = stats[testset][1] + 1
|
||||
print datestr
|
||||
print ntxt
|
||||
print "ok"
|
||||
else:
|
||||
stats[testset][0] = stats[testset][0] + 1
|
||||
print "input was:"
|
||||
print " calendar: %s" % cal_str[dateval.calendar]
|
||||
print " modifier: %s" % mod_str[dateval.modifier]
|
||||
print " quality: %s" % qua_str[dateval.quality]
|
||||
print " dateval: %s" % str(dateval.dateval)
|
||||
print " text: '%s'" % dateval.text
|
||||
if ex == "Display":
|
||||
print "This date is not displayable because of an Exception:"
|
||||
print errmsg
|
||||
else:
|
||||
print "DateDisplay gives: '%s'" % datestr
|
||||
if ex == "Parser":
|
||||
print "This date is not parsable because of an Exception:"
|
||||
print errmsg
|
||||
else:
|
||||
print "parsed date was:"
|
||||
print " calendar: %s" % cal_str[ndate.calendar]
|
||||
print " modifier: %s" % mod_str[ndate.modifier]
|
||||
print " quality: %s" % qua_str[ndate.quality]
|
||||
print " dateval: %s" % str(ndate.dateval)
|
||||
print " text: '%s'" % ndate.text
|
||||
print "this gives:'%s'" % ntxt
|
||||
print
|
||||
|
||||
print "RESULT:"
|
||||
for result in stats:
|
||||
print "% 13s: % 5d dates ok, % 4d failed." % (stats[result][2],stats[result][1],stats[result][0])
|
||||
Reference in New Issue
Block a user