1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#!/usr/bin/env python
''' Setup test based on locally-stored UFOs
Reads from tests/localufos.csv which has format ufopath,type where
- ufopath is the full path to the ufo
- type is either:
- "copy" to copy the ufo to local/ufotests/source (to protect against future changes to the ufo
- "insitu" to use the uso from where it is, for ufos unlikely to be changed during a development cycle
It should be run with stable pysilfont code prior to starting development and will create reference copies of the fonts
by normalizing with checkfix=fix
Once setup, "pytest local/ufotests" will again normalize all the fonts listed and compare with the reference fonts
'''
__url__ = 'https://github.com/silnrsi/pysilfont'
__copyright__ = 'Copyright (c) 2018 SIL International (https://www.sil.org)'
__license__ = 'Released under the MIT License (https://opensource.org/licenses/MIT)'
__author__ = 'David Raymond'
from silfont.core import execute, csvreader
import silfont.scripts.psfnormalize as psfnormalize
import os, sys, shutil
# Check being run in pysilfont root directory
cwd = os.getcwd()
if os.path.split(cwd)[1] != "pysilfont":
print("setupTestdata must be run in pysilfont root directory")
sys.exit(1)
# Open config file
cfg = csvreader("tests/localufos.csv")
cfg.numfields=2
# Clear out any previous data and create directory tree
if os.path.isdir("local/ufotests"): shutil.rmtree("local/ufotests")
for type in ("source", "results", "reference", "logs"): os.makedirs("local/ufotests/" + type)
# Create source (for type=copy) and reference copies of the ufos
ufolist = []
for ufo,type in cfg:
(path,ufoname) = os.path.split(ufo)
logname = ufoname[:-4] + ".log"
if not os.path.isdir(ufo):
print (ufo + " is not a directory")
continue
if type == "copy":
sourcedir = "local/ufotests/source/" + ufoname
shutil.copytree(ufo, sourcedir)
elif type == "insitu":
sourcedir = ufo
else:
print("Invalid type '" + type + "' for " + ufo)
continue
sys.argv = ["psfnormalize", sourcedir, "-l", "local/ufotests/results/" + logname, "-q", "-p", "checkfix=fix"]
print("Normalizing " + sourcedir + " for reference")
(args, font) = execute("UFO", psfnormalize.doit, psfnormalize.argspec, chain="first")
font.write("local/ufotests/results/" + ufoname)
# Move from results to reference - originally written to results to get reference log file correct
os.rename("local/ufotests/results/" + ufoname, "local/ufotests/reference/" + ufoname)
os.rename("local/ufotests/results/" + logname, "local/ufotests/reference/" + logname)
#errorcount = args.logger.errorcount -1 if args.logger.errorcount else 0 # If there is an error, reduce count for extra error reporting that there were errors!
ufolist.append((sourcedir, ufoname[:-4], str(args.logger.errorcount), str(args.logger.warningcount)))
args.logger.logfile.close() # Make sure final log file is closed
# Create ufolist.csv
ufofile = open("local/ufotests/ufolist.csv", "w")
for line in ufolist:
ufofile.write(",".join(line) + "\n")
# Copy the main test to local/ufotests
shutil.copy("tests/runlocalufotests.py", "local/ufotests/test_localufos.py")
|