aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-01-06 19:13:30 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-01-06 19:13:30 +0200
commit54e47554c36870a43061c0860e5a69494c18cc02 (patch)
tree4793982ba93ee7fce0422ff3b66422bb8f9c9480
parentc8fee3d4172f39da5bb05077a57a57284825007e (diff)
downloadmeson-54e47554c36870a43061c0860e5a69494c18cc02.zip
meson-54e47554c36870a43061c0860e5a69494c18cc02.tar.gz
meson-54e47554c36870a43061c0860e5a69494c18cc02.tar.bz2
Added unit test functionality to builder.
-rwxr-xr-xinterpreter.py26
-rwxr-xr-xshellgenerator.py26
-rw-r--r--test cases/1 trivial/builder.txt2
3 files changed, 51 insertions, 3 deletions
diff --git a/interpreter.py b/interpreter.py
index cb9b4d2..9d3aa78 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -87,7 +87,6 @@ class Executable(BuildTarget):
self.filename = self.name + '.' + suffix
else:
self.filename = self.name
-
class StaticLibrary(BuildTarget):
def __init__(self, name, sources, environment):
@@ -103,6 +102,18 @@ class SharedLibrary(BuildTarget):
suffix = environment.get_shared_lib_suffix()
self.filename = prefix + self.name + '.' + suffix
+class Test(InterpreterObject):
+ def __init__(self, name, exe):
+ InterpreterObject.__init__(self)
+ self.name = name
+ self.exe = exe
+
+ def get_exe(self):
+ return self.exe
+
+ def get_name(self):
+ return self.name
+
class Interpreter():
def __init__(self, code, environment):
@@ -115,6 +126,7 @@ class Interpreter():
self.environment = environment
self.static_linker = self.environment.detect_static_linker()
self.build_func_dict()
+ self.tests = []
def build_func_dict(self):
self.funcs = {'project' : self.func_project,
@@ -123,7 +135,8 @@ class Interpreter():
'executable': self.func_executable,
'find_dep' : self.func_find_dep,
'static_library' : self.func_static_lib,
- 'shared_library' : self.func_shared_lib
+ 'shared_library' : self.func_shared_lib,
+ 'add_test' : self.func_add_test
}
def get_project(self):
@@ -131,6 +144,9 @@ class Interpreter():
def get_targets(self):
return self.targets
+
+ def get_tests(self):
+ return self.tests
def sanity_check_ast(self):
if not isinstance(self.ast, nodes.CodeBlock):
@@ -216,6 +232,12 @@ class Interpreter():
def func_shared_lib(self, node, args):
return self.build_target(node, args, SharedLibrary)
+
+ def func_add_test(self, node, args):
+ self.validate_arguments(args, 2, [str, Executable])
+ t = Test(args[0], args[1])
+ self.tests.append(t)
+ print('Adding test "%s"' % args[0])
def build_target(self, node, args, targetclass):
for a in args:
diff --git a/shellgenerator.py b/shellgenerator.py
index 2f04ecd..009ac7c 100755
--- a/shellgenerator.py
+++ b/shellgenerator.py
@@ -26,10 +26,15 @@ class ShellGenerator():
self.environment = environment
self.interpreter = interpreter
self.build_filename = 'compile.sh'
+ self.test_filename = 'run_tests.sh'
self.processed_targets = {}
def generate(self):
self.interpreter.run()
+ self.generate_compile_script()
+ self.generate_test_script()
+
+ def generate_compile_script(self):
outfilename = os.path.join(self.environment.get_build_dir(), self.build_filename)
outfile = open(outfilename, 'w')
outfile.write('#!/bin/sh\n\n')
@@ -43,6 +48,27 @@ class ShellGenerator():
os.chmod(outfilename, stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC |\
stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
+ def generate_test_script(self):
+ outfilename = os.path.join(self.environment.get_build_dir(), self.test_filename)
+ outfile = open(outfilename, 'w')
+ outfile.write('#!/bin/sh\n\n')
+ outfile.write('echo This is an autogenerated shell script test file for project \\"%s\\".\n'
+ % self.interpreter.get_project())
+ outfile.write('echo Run the compile script before this one or bad things will happen!\n')
+ cdcmd = ['cd', self.environment.get_build_dir()]
+ outfile.write(' '.join(shell_quote(cdcmd)) + '\n')
+ self.generate_tests(outfile)
+ outfile.close()
+ os.chmod(outfilename, stat.S_IREAD | stat.S_IWRITE | stat.S_IEXEC |\
+ stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
+
+ def generate_tests(self, outfile):
+ for t in self.interpreter.get_tests():
+ cmds = []
+ cmds.append(self.get_target_filename(t.get_exe()))
+ outfile.write('echo Running test \\"%s\\".\n' % t.get_name())
+ outfile.write(' '.join(shell_quote(cmds)) + ' || exit\n')
+
def generate_single_compile(self, target, outfile, src):
compiler = None
for i in self.interpreter.compilers:
diff --git a/test cases/1 trivial/builder.txt b/test cases/1 trivial/builder.txt
index 0ab3f5d..c8a0ae2 100644
--- a/test cases/1 trivial/builder.txt
+++ b/test cases/1 trivial/builder.txt
@@ -1,4 +1,4 @@
project('trivial test')
language('c')
exe = executable('trivialprog', 'trivial.c')
-
+add_test('runtest', exe)