#!/bin/sh
# Test __CODE__

# Copyright (C) 2008, 2009 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
$CC $CPPFLAGS -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++ $CPPFLAGS -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
gcj -c -o parse_clInterface.o parse_clInterface.java          || fail=1
gcj -c -o parse_clEx.o        parse_clEx.java                 || fail=1
gcj -c -o parse_cl.o          parse_cl.java                   || fail=1
gcj -c -o simple.o            $srcdir/simple.java             || fail=1
gcj --main=simple /usr/share/java/gnu-getopt.jar parse_clInterface.o parse_clEx.o\
  parse_cl.o simple.o -o parse_cl || 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

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

exit $fail
