else:
infile = None
- args = [str(source[0])]
+ if env.has_key("COMMAND"):
+ args = [env["COMMAND"]]
+ else:
+ args = [str(source[0])]
+
if env.has_key('ARGS'):
args.extend(env['ARGS'])
+ print 'Command line: ' + str(args)
pipe = subprocess.Popen(args,
stdin = infile,
stdout = open(str(target[0]), 'w'),
stderr = sys.stderr)
result = pipe.wait()
if result == 0:
- print '\033[32m[ OK ]\033[0m Ran ' + str(source[0])
+ print '\033[32m[ OK ]\033[0m Ran ' + args[0]
else:
- print '\033[31m[FAIL]\033[0m Program ' + str(source[0]) + ' returned ' + str(result)
+ print '\033[31m[FAIL]\033[0m Program ' + args[0] + ' returned ' + str(result)
return result
run_test_builder = Builder(action = run_test,
data = open(str(source[0]), 'rU').read()
patterns = open(str(source[1]))
for pattern in patterns:
- if pattern.strip() and not re.search(pattern.strip(), data, re.MULTILINE):
- print '\033[31m[FAIL]\033[0m Pattern not found in ' + str(source[0]) + ': ' + pattern
- return 1
+ if pattern.strip():
+ invert = False
+ if pattern.startswith('! '):
+ invert = True
+ pattern = pattern[2:]
+
+ status = re.search(pattern.strip(), data, re.MULTILINE)
+
+ if not status and not invert:
+ print '\033[31m[FAIL]\033[0m Pattern not found in ' + str(source[0]) + ': ' + pattern
+ return 1
+ elif status and invert:
+ print '\033[31m[FAIL]\033[0m Pattern should not exist, but does in ' + str(source[0]) + ': ' + pattern
+ return 1
else:
print '\033[32m[ OK ]\033[0m All patterns found in ' + str(source[0])
return 0