aboutsummaryrefslogtreecommitdiff
path: root/examples_test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'examples_test.sh')
-rwxr-xr-xexamples_test.sh115
1 files changed, 115 insertions, 0 deletions
diff --git a/examples_test.sh b/examples_test.sh
new file mode 100755
index 000000000000..936fa865d0d4
--- /dev/null
+++ b/examples_test.sh
@@ -0,0 +1,115 @@
+#! __ATF_SH__
+# Copyright 2012 Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of Google Inc. nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Cxx="__CXX__"
+ExamplesDir="__EXAMPLESDIR__"
+LibDir="__LIBDIR__"
+
+
+make_example() {
+ cp "${ExamplesDir}/Makefile" "${ExamplesDir}/${1}.cpp" .
+ make CXX="${Cxx}" "${1}"
+
+ # Ensure that the binary we just built can find liblutok. This is
+ # needed because the lutok.pc file (which the Makefile used above
+ # queries) does not provide rpaths to the installed library and
+ # therefore the binary may not be able to locate it. Hardcoding the
+ # rpath flags into lutok.pc is non-trivial because we simply don't
+ # have any knowledge about what the correct flag to set an rpath is.
+ #
+ # Additionally, setting rpaths is not always the right thing to do.
+ # For example, pkgsrc will automatically change lutok.pc to add the
+ # missing rpath, in which case this is unnecessary. But in the case
+ # of Fedora, adding rpaths goes against the packaging guidelines.
+ if [ -n "${LD_LIBRARY_PATH}" ]; then
+ export LD_LIBRARY_PATH="${LibDir}:${LD_LIBRARY_PATH}"
+ else
+ export LD_LIBRARY_PATH="${LibDir}"
+ fi
+}
+
+
+example_test_case() {
+ local name="${1}"; shift
+
+ atf_test_case "${name}"
+ eval "${name}_head() { \
+ atf_set 'require.files' '${ExamplesDir}/${name}.cpp'; \
+ atf_set 'require.progs' 'make pkg-config'; \
+ }"
+ eval "${name}_body() { \
+ make_example '${name}'; \
+ ${name}_validate; \
+ }"
+}
+
+
+example_test_case bindings
+bindings_validate() {
+ atf_check -s exit:0 -o inline:'120\n' ./bindings 5
+ atf_check -s exit:1 -e match:'Argument.*must be an integer' ./bindings foo
+ atf_check -s exit:1 -e match:'Argument.*must be positive' ./bindings -5
+}
+
+
+example_test_case hello
+hello_validate() {
+ atf_check -s exit:0 -o inline:'Hello, world!\n' ./hello
+}
+
+
+example_test_case interpreter
+interpreter_validate() {
+ cat >script.lua <<EOF
+test_variable = 12345
+print("From the interpreter: " .. (test_variable - 345))
+EOF
+
+ atf_check -s exit:0 -o match:"From the interpreter: 12000" \
+ -x "./interpreter <script.lua"
+}
+
+
+example_test_case raii
+raii_validate() {
+cat >expout <<EOF
+String in field foo: hello
+String in field bar: 123
+String in field baz: bye
+EOF
+ atf_check -s exit:0 -o file:expout ./raii
+}
+
+
+atf_init_test_cases() {
+ atf_add_test_case bindings
+ atf_add_test_case hello
+ atf_add_test_case interpreter
+ atf_add_test_case raii
+}