#! /bin/sh
# Copyright (C) 2011-2017 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

# Sanity check for the automake testsuite.
# Check that tests using 'test-init.sh' create a proper temporary
# directory, and run in it.  Also check that we can prevent the
# pre-population and the creation of such directory if we want.

am_create_testdir=no
. test-init.sh

plan_ 5

unset keep_testdirs

# This needs to be consistent with what $AM_TEST_RUNNER_SHELL
# deems to be the current working directory.
cwd=$($AM_TEST_RUNNER_SHELL -c 'pwd') \
  || fatal_ "can't get current working directory"
echo "$cwd"

do_check ()
{
  rm -rf _self.dir || framework_failure_ "cleaning up _self.dir"
  command_ok_ "$1 [$2]" $AM_TEST_RUNNER_SHELL -c "
    $2
   . test-init.sh
    # Don't fail if 'ls -l' fails; avoids possible racy spurious failures.
    pwd; ls -l || : # For debugging.
    $3
  " t/_self.sh
}

do_check 'testdir has the expected path' \
         'unset am_create_testdir' \
         'case $(pwd) in '"$cwd"'/t/_self.dir);; *) exit 1;; esac'

do_check 'fully pre-populated testdir' \
         'unset am_create_testdir' \
         'test -f install-sh || exit 1
          test -f configure.ac || exit 1
          case $(pwd) in '"$cwd"'/t/_self.dir) : ;; *) exit 1;; esac'

do_check 'testdir has the expected path' \
         'am_create_testdir=empty' \
         'case $(pwd) in '"$cwd"'/t/_self.dir) : ;; *) exit 1;; esac'

do_check 'do not pre-populate testdir' \
         'am_create_testdir=empty' \
         'ls -a | grep -v "^\\.\\{1,2\\}$" | grep . && exit 1; :'

do_check 'do not create nor chdir in testdir' \
         'am_create_testdir=no' \
         'test ! -e t/_self.dir || exit 1
          grep "self-check-dir\.tap" Makefile || exit 1
          case $(pwd) in '"$cwd"') : ;; *) exit 1;; esac'

:
