#! /bin/sh
# Copyright (C) 2011-2024 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/>.

# Test more basic functionalities of the 'py-compile' script,
# with "believable" python sources.  See also related test
# 'py-compile-basic2.sh'.

required=python
. test-init.sh

cp "$am_scriptdir/py-compile" . \
  || fatal_ "failed to fetch auxiliary script py-compile"

cat > foo.py <<'END'
# Try out some non-trivial syntax in here.

'''Module docstring'''

def foo (*args, **kwargs):
  """Function docstring
  with embedded newline"""
  return 1

class Foo:
  r"""Class docstring"""
  def __init__(self):
    r'''Method docstring
        with
        embedded
        newlines'''
    pass

bar = baz = (1, (2,), [3, 4]); zardoz = 0;
END

mkdir sub
cat > sub/bar.py <<'END'
# Import of non-existent modules, or assertion of false conditions,
# shouldn't cause problems, as it should be enough for the code to
# be syntactically correct.
import Automake.No.Such.Module
assert False
END

# An empty file in a more deeply-nested directory should be ok as well.
mkdir -p 1/_/2/_/3/_
: > 1/_/2/_/3/_/0.py

./py-compile foo.py sub/bar.py 1/_/2/_/3/_/0.py
py_installed foo.pyc
py_installed sub/bar.pyc
py_installed 1/_/2/_/3/_/0.pyc

:
