#!/bin/bash
# Test __CODE__

# Copyright (C) 2008 - 2016 Michael Geng <linux@MichaelGeng.de>

# 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 of the License, 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 <http://www.gnu.org/licenses/>.

if test "$VERBOSE" = yes; then
  set -x
fi

. test-lib.sh

# -------------------------------------------------------
# C language
# -------------------------------------------------------

echo "void print_text (void);" > x.h

echo "void print_text (void)
{
  puts (\"my text\");
}" > x.c

echo "#include \"stdio.h\"
#include \"x.h\"
a flag \"Print command in one line\"
__CODE__(printf (\"Flag a was set.\n\");)
b flag \"Print command distributed among many lines\"
__CODE__(
printf 
(
\"Flag b was set.\n\"
)
;
)

#usage_begin
__CODE__(print_text ();)
#usage_end" > x.gp

echo "Flag a was set.
Flag b was set." > exp

echo "my text" > exp_help

$GENPARSE --language c x.gp >/dev/null                  || fail=1
gcc $CFLAGS -o parse_cl parse_cl.c $srcdir/simple.c x.c || fail=1
parse_cl -a -b > out                                    || fail=1
cmp out exp                                             || fail=1
parse_cl --help > out                                   || fail=1
cmp out exp_help                                        || fail=1

# -------------------------------------------------------
# C++ language
# -------------------------------------------------------

echo "#include <iostream>
void print_text (void)
{
  std::cout << \"my text\" << std::endl;
}" > x.cc

$GENPARSE --language cc x.gp >/dev/null                      || fail=1
g++ $CXXFLAGS -o parse_cl parse_cl.cc $srcdir/simple.cc x.cc || fail=1
parse_cl -a -b > out                                         || fail=1
cmp out exp                                                  || fail=1
parse_cl --help > out                                        || fail=1
cmp out exp_help                                             || fail=1

# -------------------------------------------------------
# Java language
# -------------------------------------------------------

echo "#include \"x.h\"
a flag \"Print command in one line\"
__CODE__(System.out.println (\"Flag a was set.\");)
b flag \"Print command distributed among many lines\"
__CODE__(
System.out.println 
(
\"Flag b was set.\"
)
;
)

#usage_begin
__CODE__(System.out.println (\"my text\");)
#usage_end" > x.gp

echo "class my_class
{
  public void print_text ()
  {
    System.out.println (\"my text\");
  }
}" > x.h

$GENPARSE --language java --parsefunc parse_cl x.gp >/dev/null        || fail=1
rm -f classes/*                                                       || fail=1
mkdir -p classes/                                                     || fail=1
javac -classpath $CLASSPATH:classes -d classes parse_clInterface.java || fail=1
javac -classpath $CLASSPATH:classes -d classes parse_clEx.java        || fail=1
javac -classpath $CLASSPATH:classes -d classes parse_cl.java          || fail=1
javac -classpath $CLASSPATH:classes -d classes $srcdir/simple.java    || fail=1
java  -classpath $CLASSPATH:classes simple -a -b > out                || fail=1
cmp out exp                                                           || fail=1
java  -classpath $CLASSPATH:classes simple --help > out               || fail=1
cmp out exp_help                                                      || fail=1

rm -f x.c x.cc x.h exp_help

exit $fail
