diff options
author | Björn Persson <Bjorn@Rombobjörn.se> | 2014-02-02 23:42:09 +0100 |
---|---|---|
committer | Björn Persson <Bjorn@Rombobjörn.se> | 2014-02-02 23:42:09 +0100 |
commit | 17adf2f999c06f1f7d207cb9ce5e2518b7e89ca6 (patch) | |
tree | dd698a099ec0e7ea75233565c7e8c09378ff89c1 | |
parent | 00f4b3a5e2ac1bbf44b127858adf5284eabd94e4 (diff) | |
parent | 16639abaf4bc45b92d6ac70e25d457412c1a11bb (diff) |
Merged the branch "testsuite".
29 files changed, 519 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2306c69 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +# Makefile for running Comfignat's testsuite +# Copyright 2013 B. Persson, Bjorn@Rombobeorn.se +# +# This material is provided as is, with absolutely no warranty expressed +# or implied. Any use is at your own risk. +# +# Permission is hereby granted to use or copy this makefile +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. + + +include comfignat.mk + +check: + "${srcdir}/testsuite/run_tests" "${srcdir}" "${builddir}" + +clean:: + rm -Rf "${builddir}/testruns" + +base: + @echo "You don't build Comfignat. This makefile is for the testsuite." diff --git a/testsuite/inputs/build_with_Gnatmake b/testsuite/inputs/build_with_Gnatmake new file mode 100644 index 0000000..124f632 --- /dev/null +++ b/testsuite/inputs/build_with_Gnatmake @@ -0,0 +1,4 @@ +expect_configuration +expect_generated_files +common_setup +GNAT_BUILDER=gnatmake make diff --git a/testsuite/inputs/clean b/testsuite/inputs/clean new file mode 100644 index 0000000..2b37fec --- /dev/null +++ b/testsuite/inputs/clean @@ -0,0 +1,4 @@ +expect_configuration +common_setup +make +make clean diff --git a/testsuite/inputs/configure_and_build b/testsuite/inputs/configure_and_build new file mode 100644 index 0000000..3b4a060 --- /dev/null +++ b/testsuite/inputs/configure_and_build @@ -0,0 +1,8 @@ +prefix=/usr +libdir=/usr/lib64 +frobnicate=true +expect_configuration always +expect_generated_files +common_setup +make configure prefix="${prefix}" libdir="${libdir}" frobnicate=true +make diff --git a/testsuite/inputs/configure_and_clean b/testsuite/inputs/configure_and_clean new file mode 100644 index 0000000..ba9b640 --- /dev/null +++ b/testsuite/inputs/configure_and_clean @@ -0,0 +1,13 @@ +expect_configuration always +common_setup +make configure bindir='${prefix}/special' +make clean +expected='bindir = ${prefix}/special' +conf=$(make show_configuration --no-print-directory) +if [ "${conf}" != "${expected}" ] ; then + echo "Expected configuration:" >&2 + echo "${expected}" >&2 + echo "Configuration found:" >&2 + echo "${conf}" >&2 + exit 1 +fi diff --git a/testsuite/inputs/default_build b/testsuite/inputs/default_build new file mode 100644 index 0000000..635b842 --- /dev/null +++ b/testsuite/inputs/default_build @@ -0,0 +1,4 @@ +expect_configuration +expect_generated_files +common_setup +make diff --git a/testsuite/inputs/directories_project b/testsuite/inputs/directories_project new file mode 100644 index 0000000..e477a8d --- /dev/null +++ b/testsuite/inputs/directories_project @@ -0,0 +1,5 @@ +prefix=/opt/comfignat_test +expect_configuration +expect_generated_files +common_setup +make dirgpr="${dirgpr}" gprdir="${gprdir}" libexecdir="${libexecdir}" diff --git a/testsuite/inputs/distclean b/testsuite/inputs/distclean new file mode 100644 index 0000000..6e5e472 --- /dev/null +++ b/testsuite/inputs/distclean @@ -0,0 +1,3 @@ +common_setup +make +make distclean diff --git a/testsuite/inputs/relocatable b/testsuite/inputs/relocatable new file mode 100644 index 0000000..a060390 --- /dev/null +++ b/testsuite/inputs/relocatable @@ -0,0 +1,4 @@ +expect_configuration +expect_generated_files +common_setup +make relocatable_package=true diff --git a/testsuite/library b/testsuite/library new file mode 100644 index 0000000..4482215 --- /dev/null +++ b/testsuite/library @@ -0,0 +1,72 @@ +# function library for Comfignat's testcases +# Copyright 2013 - 2014 B. Persson, Bjorn@Rombobeorn.se +# +# This material is provided as is, with absolutely no warranty expressed +# or implied. Any use is at your own risk. +# +# Permission is hereby granted to use or copy this testsuite +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. + + +expect_configuration () { + # If "always" is passed, the testcase is always expected to leave a + # configuration file. If this is called without "always", a configuration + # file is expected only in a separate build directory. + if [ "$1" = always -o "${relative_builddir}" != . ] ; then + echo "${builddir}"/comfignat_configuration.mk >>"${file_list}" + fi +} + + +expect_generated_files () { + # The testcase is expected to generate files which are listed in the file + # generated_files. The list is whitespace-separated and may contain shell + # variable references. + + # These directory variables mustn't be conveyed from Comfignat, because then + # the testsuite would rely on the same thing that it's supposed to test. + prefix=${prefix:-/usr/local} + exec_prefix=${exec_prefix:-${prefix}} + datarootdir=${datarootdir:-${prefix}/share} + bindir=${bindir:-${exec_prefix}/bin} + libexecdir=${libexecdir:-${exec_prefix}/libexec} + includedir=${includedir:-${prefix}/include} + libdir=${libdir:-${exec_prefix}/lib} + alidir=${alidir:-${libdir}} + gprdir=${gprdir:-${datarootdir}/gpr} + stagedir=stage + stage_bindir=${stagedir}${bindir} + stage_libexecdir=${stagedir}${libexecdir} + stage_includedir=${stagedir}${includedir} + stage_libdir=${stagedir}${libdir} + stage_alidir=${stagedir}${alidir} + stage_gprdir=${stagedir}${gprdir} + + for file in $(cat "${srcdir}"/generated_files) ; do + # Expand variables in the string to get the pathname. + eval file="${file}" + # Write the pathname and its parent directories to the file list. + # Chop off pathname components until only "." remains, but also avoid + # looping forever if the final residue turns out to be "/" or "//". + while [ "${file}" != . -a "${file}" != / -a "${file}" != // ] ; do + echo "${builddir}/${file}" >>"${file_list}" + file=$(dirname "${file}") + done + done +} + + +common_setup () { + # When the locations file specifies a separate build directory, initialize + # the build directory and go there. When the source directory is also the + # build directory, just go to that directory. + cd "${srcdir}" + if [ "${relative_builddir}" != . ] ; then + echo "${builddir}"/Makefile >>"${file_list}" + make configure builddir="${relative_builddir}" + cd "${relative_builddir}" + fi +} diff --git a/testsuite/locations/separate b/testsuite/locations/separate new file mode 100644 index 0000000..a2fc7f1 --- /dev/null +++ b/testsuite/locations/separate @@ -0,0 +1,3 @@ +srcdir=parent/source +builddir=build +relative_builddir=../../build diff --git a/testsuite/locations/space b/testsuite/locations/space new file mode 100644 index 0000000..8323fa2 --- /dev/null +++ b/testsuite/locations/space @@ -0,0 +1,3 @@ +srcdir="name with spaces" +builddir="${srcdir}" +relative_builddir=. diff --git a/testsuite/run_tests b/testsuite/run_tests new file mode 100755 index 0000000..06e9c4c --- /dev/null +++ b/testsuite/run_tests @@ -0,0 +1,132 @@ +#!/bin/sh + +# Comfignat's testsuite +# Copyright 2013 - 2014 B. Persson, Bjorn@Rombobeorn.se +# +# This material is provided as is, with absolutely no warranty expressed +# or implied. Any use is at your own risk. +# +# Permission is hereby granted to use or copy this testsuite +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. + + +# It is hoped that this program will work in any Posix-compliant shell. + +set -e + +# Get the command line parameters. +outer_srcdir="$1" +outer_builddir="$2" + +testsuitedir="${outer_srcdir}"/testsuite + +# Initialize counters. +passed=0 +failed=0 + +# The testcases should use their own build directories, not the one of the Make +# process that invoked the testsuite. +Comfignat_overriding_absolute_builddir= +Comfignat_overriding_absolute_objdir= +Comfignat_overriding_absolute_stagedir= + +# variables that the testcases need: +export file_list # absolute pathname of list of expected files +export srcdir # testcase's source directory relative to testrundir +export builddir # testcase's build directory relative to testrundir +export relative_builddir # testcase's build directory relative to srcdir +export dirgpr="${testsuitedir}"/test_directories.gpr + + +pass () { + # Report the current testcase as passed. + echo "${test_name}: PASSED" + passed=$((passed + 1)) +} + + +fail () { + # Report the current testcase as failed. + # Parameters: + # 1: a message about what went wrong + # 2: the name of a file with details about the error + echo "${test_name}: FAILED" + echo "$1" + cat "$2" + echo + failed=$((failed + 1)) +} + + +# Clean out any old test results. +rm -Rf "${outer_builddir}"/testruns + +for source_directory in "${testsuitedir}"/sources/* ; do + for location_file in "${testsuitedir}"/locations/* ; do + for input_script in "${testsuitedir}"/inputs/* ; do + + # Compose the name of the combined testcase. + test_name=$(basename "${source_directory}")+$(basename "${location_file}")+$(basename "${input_script}") + testrundir="${outer_builddir}"/testruns/"${test_name}" + file_list="${testrundir}"/files.expected + mkdir -p "${testrundir}" + cd "${testrundir}" + + # Get the source and build directory names. + . "${location_file}" + mkdir -p "${srcdir}" + if [ "${relative_builddir}" != . ] ; then + echo "${builddir}" >>files.expected + fi + + # Populate the source directory. + cp -RHp "${source_directory}"/* "${srcdir}" + cp -p "${outer_srcdir}"/comfignat.* "${srcdir}" + find "${srcdir}" >>files.expected + + # Run the testcase in a child process. + # The child process first loads the function library and then runs the + # input script. + if sh -e -c ". ${testsuitedir}/library; . ${input_script}" >output 2>&1 ; then + + # Check that the expected files and no others are present. + # Sort the list of expected files and remove duplicates. + LC_COLLATE=C sort -u -o files.expected files.expected + # List all files in the build directory except for the directory + # where intermediate files are suposed to be. List the files in the + # source directory separately if the directories are separate. Sort + # the combined list the same way as the list of expected files is + # sorted. Then compare the lists. + if ( find "${builddir}" | grep -v ^"${builddir}"/obj ; test "${relative_builddir}" != . && find "${srcdir}" ) | LC_COLLATE=C sort | diff files.expected - >files.diff ; then + + # Check that the source files haven't been mangled. + cd "${source_directory}" + find . -type f ! -exec cmp -s "{}" "${testrundir}/${srcdir}/{}" \; -print >> "${testrundir}"/changed_sources + cd "${outer_srcdir}" + for file in comfignat.* ; do + if ! cmp -s ${file} "${testrundir}/${srcdir}/${file}" ; then + echo ${file} >> "${testrundir}"/changed_sources + fi + done + if [ -s "${testrundir}"/changed_sources ] ; then + fail "Changed soure files:" "${testrundir}"/changed_sources + else + pass + fi + else + fail "Difference from the list of expected files:" files.diff + fi + else + fail "Error code: $?" output + fi + + done + done +done + +echo +echo "passed: ${passed}, failed: ${failed}" +exit ${failed} diff --git a/testsuite/sources/empty/Makefile b/testsuite/sources/empty/Makefile new file mode 100644 index 0000000..7bfdf9f --- /dev/null +++ b/testsuite/sources/empty/Makefile @@ -0,0 +1 @@ +include comfignat.mk diff --git a/testsuite/sources/empty/generated_files b/testsuite/sources/empty/generated_files new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/testsuite/sources/empty/generated_files diff --git a/testsuite/sources/library_1/Makefile b/testsuite/sources/library_1/Makefile new file mode 100644 index 0000000..4047099 --- /dev/null +++ b/testsuite/sources/library_1/Makefile @@ -0,0 +1,25 @@ +# part of Comfignat's testsuite +# Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +# +# This material is provided as is, with absolutely no warranty expressed +# or implied. Any use is at your own risk. +# +# Permission is hereby granted to use or copy this testsuite +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. + + +include comfignat.mk + +options = frobnicate +frobnicate = false + +build_GPRs = build_testcase.gpr +usage_GPRs = testcase.gpr + +submake: + @${MAKE} --directory=${srcdir}/subdir + +build: submake diff --git a/testsuite/sources/library_1/build_testcase.gpr.gp b/testsuite/sources/library_1/build_testcase.gpr.gp new file mode 100644 index 0000000..5861788 --- /dev/null +++ b/testsuite/sources/library_1/build_testcase.gpr.gp @@ -0,0 +1,34 @@ +-- part of Comfignat's testsuite +-- Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +-- +-- This material is provided as is, with absolutely no warranty expressed +-- or implied. Any use is at your own risk. +-- +-- Permission is hereby granted to use or copy this testsuite +-- for any purpose, provided the above notices are retained on all copies. +-- Permission to modify the code and to distribute modified code is granted, +-- provided the above notices are retained, and a notice that the code was +-- modified is included with the above copyright notice. + + +with "comfignat.gpr"; + +library project Build_Testcase is + + #if Frobnicate then + Frob_Flag := "-frob"; + #else + Frob_Flag := ""; + #end if; + + for Library_Name use "testcase"; + for Library_Kind use "dynamic"; + for Library_Version use "libtestcase" & Frob_Flag & ".so.1"; + for Library_Interface use ("Testcase"); + for Source_Dirs use ($Srcdir); + for Object_Dir use Comfignat.Objdir; + for Library_Src_Dir use Comfignat.Stage_Includedir & "/testcase"; + for Library_Dir use Comfignat.Stage_Libdir; + for Library_ALI_Dir use Comfignat.Stage_Alidir & "/testcase"; + +end Build_Testcase; diff --git a/testsuite/sources/library_1/generated_files b/testsuite/sources/library_1/generated_files new file mode 100644 index 0000000..4ff4941 --- /dev/null +++ b/testsuite/sources/library_1/generated_files @@ -0,0 +1,8 @@ +build_testcase.gpr +comfignat.gpr +${stage_includedir}/testcase/testcase.ads +${stage_libdir}/libtestcase${frobnicate:+-frob}.so.1 +${stage_libdir}/libtestcase.so +${stage_alidir}/testcase/testcase.ali +${stage_gprdir}/testcase.gpr +${stage_libexecdir}/testcase/script diff --git a/testsuite/sources/library_1/subdir/Makefile b/testsuite/sources/library_1/subdir/Makefile new file mode 100644 index 0000000..9434d2d --- /dev/null +++ b/testsuite/sources/library_1/subdir/Makefile @@ -0,0 +1,15 @@ +# part of Comfignat's testsuite +# Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +# +# This material is provided as is, with absolutely no warranty expressed +# or implied. Any use is at your own risk. +# +# Permission is hereby granted to use or copy this testsuite +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. + + +submake: + @${MAKE} --directory=helper diff --git a/testsuite/sources/library_1/subdir/helper/Makefile b/testsuite/sources/library_1/subdir/helper/Makefile new file mode 100644 index 0000000..f9ec257 --- /dev/null +++ b/testsuite/sources/library_1/subdir/helper/Makefile @@ -0,0 +1,19 @@ +# part of Comfignat's testsuite +# Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +# +# This material is provided as is, with absolutely no warranty expressed +# or implied. Any use is at your own risk. +# +# Permission is hereby granted to use or copy this testsuite +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. + + +include ../../comfignat.mk + +build: ${stage_libexecdir}/testcase/script + +${stage_libexecdir}/testcase/script: script | ${stage_libexecdir}/testcase/ + cp -p $< $@ diff --git a/testsuite/sources/library_1/subdir/helper/script b/testsuite/sources/library_1/subdir/helper/script new file mode 100755 index 0000000..f013b39 --- /dev/null +++ b/testsuite/sources/library_1/subdir/helper/script @@ -0,0 +1,3 @@ +#!/bin/bash + +echo "Hi ho!" diff --git a/testsuite/sources/library_1/testcase.adb b/testsuite/sources/library_1/testcase.adb new file mode 100644 index 0000000..df96cc3 --- /dev/null +++ b/testsuite/sources/library_1/testcase.adb @@ -0,0 +1,24 @@ +-- part of Comfignat's testsuite +-- Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +-- +-- This material is provided as is, with absolutely no warranty expressed +-- or implied. Any use is at your own risk. +-- +-- Permission is hereby granted to use or copy this testsuite +-- for any purpose, provided the above notices are retained on all copies. +-- Permission to modify the code and to distribute modified code is granted, +-- provided the above notices are retained, and a notice that the code was +-- modified is included with the above copyright notice. + + +with Ada.Calendar; use Ada.Calendar; +with Ada.Text_IO; use Ada.Text_IO; + +package body Testcase is + + function Year return String is + begin + return Year(Clock)'Img; + end Year; + +end Testcase; diff --git a/testsuite/sources/library_1/testcase.ads b/testsuite/sources/library_1/testcase.ads new file mode 100644 index 0000000..d2646b8 --- /dev/null +++ b/testsuite/sources/library_1/testcase.ads @@ -0,0 +1,18 @@ +-- part of Comfignat's testsuite +-- Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +-- +-- This material is provided as is, with absolutely no warranty expressed +-- or implied. Any use is at your own risk. +-- +-- Permission is hereby granted to use or copy this testsuite +-- for any purpose, provided the above notices are retained on all copies. +-- Permission to modify the code and to distribute modified code is granted, +-- provided the above notices are retained, and a notice that the code was +-- modified is included with the above copyright notice. + + +package Testcase is + + function Year return String; + +end Testcase; diff --git a/testsuite/sources/library_1/testcase.gpr.gp b/testsuite/sources/library_1/testcase.gpr.gp new file mode 100644 index 0000000..de4645c --- /dev/null +++ b/testsuite/sources/library_1/testcase.gpr.gp @@ -0,0 +1,27 @@ +-- part of Comfignat's testsuite +-- Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +-- +-- This material is provided as is, with absolutely no warranty expressed +-- or implied. Any use is at your own risk. +-- +-- Permission is hereby granted to use or copy this testsuite +-- for any purpose, provided the above notices are retained on all copies. +-- Permission to modify the code and to distribute modified code is granted, +-- provided the above notices are retained, and a notice that the code was +-- modified is included with the above copyright notice. + + +#if Directories_GPR'Defined then +with $Directories_GPR; +#end if; + +library project Testcase is + + for Library_Name use "testcase"; + for Library_Kind use "dynamic"; + for Source_Dirs use ($Includedir & "/testcase"); + for Library_Dir use $Libdir; + for Library_ALI_Dir use $Alidir & "/testcase"; + for Externally_Built use "true"; + +end Testcase; diff --git a/testsuite/sources/program_1/Makefile b/testsuite/sources/program_1/Makefile new file mode 100644 index 0000000..c5f8e5c --- /dev/null +++ b/testsuite/sources/program_1/Makefile @@ -0,0 +1,16 @@ +# part of Comfignat's testsuite +# Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +# +# This material is provided as is, with absolutely no warranty expressed +# or implied. Any use is at your own risk. +# +# Permission is hereby granted to use or copy this testsuite +# for any purpose, provided the above notices are retained on all copies. +# Permission to modify the code and to distribute modified code is granted, +# provided the above notices are retained, and a notice that the code was +# modified is included with the above copyright notice. + + +include comfignat.mk + +build_GPRs = build_testcase.gpr diff --git a/testsuite/sources/program_1/build_testcase.gpr b/testsuite/sources/program_1/build_testcase.gpr new file mode 100644 index 0000000..912115b --- /dev/null +++ b/testsuite/sources/program_1/build_testcase.gpr @@ -0,0 +1,20 @@ +-- part of Comfignat's testsuite +-- Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +-- +-- This material is provided as is, with absolutely no warranty expressed +-- or implied. Any use is at your own risk. +-- +-- Permission is hereby granted to use or copy this testsuite +-- for any purpose, provided the above notices are retained on all copies. +-- Permission to modify the code and to distribute modified code is granted, +-- provided the above notices are retained, and a notice that the code was +-- modified is included with the above copyright notice. + + +with "comfignat.gpr"; + +standard project Build_Testcase is + for Main use ("testcase"); + for Object_Dir use Comfignat.Objdir; + for Exec_Dir use Comfignat.Stage_Bindir; +end Build_Testcase; diff --git a/testsuite/sources/program_1/generated_files b/testsuite/sources/program_1/generated_files new file mode 100644 index 0000000..cfccc4c --- /dev/null +++ b/testsuite/sources/program_1/generated_files @@ -0,0 +1,2 @@ +comfignat.gpr +${stage_bindir}/testcase diff --git a/testsuite/sources/program_1/testcase.adb b/testsuite/sources/program_1/testcase.adb new file mode 100644 index 0000000..4121845 --- /dev/null +++ b/testsuite/sources/program_1/testcase.adb @@ -0,0 +1,20 @@ +-- part of Comfignat's testsuite +-- Copyright 2014 B. Persson, Bjorn@Rombobeorn.se +-- +-- This material is provided as is, with absolutely no warranty expressed +-- or implied. Any use is at your own risk. +-- +-- Permission is hereby granted to use or copy this testsuite +-- for any purpose, provided the above notices are retained on all copies. +-- Permission to modify the code and to distribute modified code is granted, +-- provided the above notices are retained, and a notice that the code was +-- modified is included with the above copyright notice. + + +with Ada.Calendar; use Ada.Calendar; +with Ada.Text_IO; use Ada.Text_IO; + +procedure Testcase is +begin + Put_Line(Year(Clock)'Img); +end Testcase; diff --git a/testsuite/test_directories.gpr b/testsuite/test_directories.gpr new file mode 100644 index 0000000..e402a25 --- /dev/null +++ b/testsuite/test_directories.gpr @@ -0,0 +1,9 @@ +abstract project Test_Directories is + Hardware_Platform := "multivac"; + Bindir := "/opt/comfignat_test/bin"; + Libexecdir := "/opt/comfignat_test/libexec"; + Includedir := "/opt/comfignat_test/include"; + Libdir := "/opt/comfignat_test/lib"; + Alidir := Libdir; + Archincludedir := Libdir & "/include"; +end Test_Directories; |