#! __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 <expout <