#							-*- Autotest -*-

AT_BANNER([M4sugar.])

# Copyright (C) 2000, 2001, 2002 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.


# Order of the tests:
# - m4_warn
#
# - m4_require
# uses warn/error code.
#
# - m4_text_wrap

## --------- ##
## m4_warn.  ##
## --------- ##

AT_SETUP([[m4@&t@_warn]])

# m4_text_wrap is used to display the help strings.  Also, check that
# commas are not swallowed.  This can easily happen because of
# m4-listification.

# FIXME: For the time being we use -f to make sure we do issue the
# warnings.  But maybe autom4te should handle that by itself?

AT_DATA_M4SUGAR([script.4s],
[[m4_warn([foo],  [foo])
m4_warn([bar],    [bar])
m4_warn([syntax], [syntax])
]])

AT_CHECK_M4SUGAR([-o-], 0, [],
[script.4s:3: warning: syntax
])

AT_CHECK_M4SUGAR([-o- -Wall -f], 0, [],
[script.4s:1: warning: foo
script.4s:2: warning: bar
script.4s:3: warning: syntax
])

AT_CHECK_M4SUGAR([-o- -Wnone,bar -f], 0, [],
[script.4s:2: warning: bar
])

AT_CHECK_M4SUGAR([-o- -Wnone,bar,error -f], 1, [], [stderr])
# The error message contains the path to m4, which might change.
AT_CHECK([sed 's/^autom4te.*failed/autom4te: m4 failed/' stderr], 0,
[[script.4s:2: error: bar
script.4s:2: the top level
autom4te: m4 failed with exit status: 1
]])

AT_CLEANUP


## ----------------------------------- ##
## m4_require: circular dependencies.  ##
## ----------------------------------- ##

AT_SETUP([[m4@&t@_require: circular dependencies]])

# m4_text_wrap is used to display the help strings.  Also, check that
# commas are not swallowed.  This can easily happen because of
# m4-listification.

AT_DATA_M4SUGAR([script.4s],
[[m4_defun([foo],
[m4_require([bar])])

m4_defun([bar],
[m4_require([foo])])

m4_defun([baz],
[m4_require([foo])])

m4_init
baz
]])

# Expected stderr.
AT_DATA_M4SUGAR([expout],
[[script.4s:11: error: m4_require: circular dependency of foo
script.4s:11: foo is required by...
script.4s:5: bar is expanded from...
script.4s:11: bar is required by...
script.4s:2: foo is expanded from...
script.4s:11: foo is required by...
script.4s:8: baz is expanded from...
script.4s:11: the top level
autom4te: m4 failed with exit status: 1
]])

AT_CHECK_M4SUGAR([], 1, [], stderr)
# The error message contains the path to m4, which might change.
AT_CHECK([sed 's/^autom4te.*failed/autom4te: m4 failed/' stderr], 0, [expout])
AT_CLEANUP


## -------------- ##
## m4_text_wrap.  ##
## -------------- ##

AT_SETUP([[m4@&t@_text_wrap]])

# m4_text_wrap is used to display the help strings.  Also, check that
# commas are not swallowed.  This can easily happen because of
# m4-listification.

AT_DATA_M4SUGAR([script.4s],
[[m4_divert_push([0])m4_wrap([m4_divert_pop([0])])dnl
m4_text_wrap([Short string */], [   ], [/* ], 20)

m4_text_wrap([Much longer string */], [   ], [/* ], 20)

m4_text_wrap([Short doc.], [          ], [  --short ], 30)

m4_text_wrap([Short doc.], [          ], [  --too-wide], 30)

m4_text_wrap([Super long documentation.], [          ], [  --too-wide], 30)

m4_text_wrap([First, second  , third, [,quoted]])
]])

AT_DATA([expout],
[[/* Short string */

/* Much longer
   string */

  --short Short doc.

  --too-wide
          Short doc.

  --too-wide
          Super long
          documentation.

First, second , third, [,quoted]
]])

AT_CHECK_M4SUGAR([-o-], 0, [expout])

AT_CLEANUP
