File: test010.py

package info (click to toggle)
aap 1.072-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 4,980 kB
  • ctags: 2,160
  • sloc: python: 15,113; makefile: 61; sh: 31
file content (115 lines) | stat: -rw-r--r-- 2,517 bytes parent folder | download | duplicates (2)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# 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: