# Part of the A-A-P recipe executive: Testing of rule scopes
# Copyright (C) 2002-2003 Stichting NLnet Labs
# Permission to copy and use this file is specified in the file COPYING.
# If this file is missing you can find it here: http://www.a-a-p.org/COPYING
import sys, os, stat, shutil, string
def runaap(args):
res = os.system("%s ..%sMain.py %s" % (sys.argv[1], os.sep, args))
if res:
print "Aap exited with error value %d" % res
return res
os.chdir("rectest")
# Create three recipes to test whether the rule scope is handled correctly.
rec1 = "rectest1.aap"
rec2 = "rectest2.aap"
rec3 = "rectest3.aap"
aapout = "rectest.aap.out"
touched = [ "foo.yin", "foo.zin", "foo.min", "foo.oin", "foo.ain", "foo.bin",
"asdf.yin", "asdf.zin", "asdf.min", "aaa.cin" ]
def cleanup():
for n in [ rec1, rec2, rec3, aapout ] + touched:
try:
os.remove(n)
except:
pass
cleanup()
f = open(rec1, "w")
f.write("""
:rule %%.aout : %%.ain
:print atop
:rule {global} %%.bout : %%.bin
:print btop
:update asdf.yout
:rule {local} %%.cout : %%.cin
:print ctop
:child %s
another:
:update aaa.cout
""" % rec2)
f.close()
# child recipe.
f = open(rec2, "w")
f.write("""
:child %s
:rule %%.mout : %%.min
:print mchild
:rule {global} %%.oout : %%.oin
:print ochild
:rule {local} %%.pout : %%.pin
:print pchild
""" % rec3)
f.close()
# grandchild recipe.
f = open(rec3, "w")
f.write("""
:rule %.xout : %.xin
:print xgrandchild
:rule {global} %.yout : %.yin
:print ygrandchild
:update $(match).zout # trigger local rule
:rule {local} %.zout : %.zin
:print zgrandchild
:update $(match).mout # trigger rule in parent
""")
f.close()
# input files only need to exist, they contain "nothing"!
for n in touched:
f = open(n, "w")
f.write("nothing\n")
f.close()
def check_contents(fname, expected):
f = open(fname)
actual = f.read()
f.close()
if actual != expected:
print ('File contents wrong for "%s":\n%s\n--- instead of ---\n%s\n---'
% (fname, actual, expected))
return 1
return 0
# The first time running should result in two files being copied.
res = runaap("-f %s foo.yout foo.oout foo.aout foo.bout another > %s" % (rec1, aapout))
failed = res + check_contents(aapout,
"""ygrandchild
zgrandchild
mchild
ochild
atop
btop
ygrandchild
zgrandchild
mchild
ctop
""")
cleanup()
sys.exit(failed)
# vim: set sw=4 et sts=4 tw=79 fo+=l:
syntax highlighted by Code2HTML, v. 0.9.1