#! @BUILD_SHEBANG@
set -e

# Run GRUB script in a Qemu instance
# Copyright (C) 2010  Free Software Foundation, Inc.
#
# GRUB 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 3 of the License, or
# (at your option) any later version.
#
# GRUB 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 GRUB.  If not, see <http://www.gnu.org/licenses/>.

cmd='regexp -s version "vm-(.*)" vm-1.2.3; echo $version'
v=`echo "$cmd" | @builddir@/grub-shell`
if test "$v" != 1.2.3; then echo "error: $cmd" >&2; exit 1; fi

cmd='regexp -s 1:version "vm-(.*)" vm-1.2.3; echo $version'
v=`echo "$cmd" | @builddir@/grub-shell`
if test "$v" != 1.2.3; then echo "error: $cmd" >&2; exit 1; fi

cmd='regexp -s 0:match "vm-(.*)" vm-1.2.3; echo $match'
v=`echo "$cmd" | @builddir@/grub-shell`
if test "$v" != vm-1.2.3; then echo "error: $cmd" >&2; exit 1; fi

cmd='regexp -s 2:match "vm-(.*)" vm-1.2.3; echo $match'
v=`echo "$cmd" | @builddir@/grub-shell`
if test -n "$v"; then echo "error: $cmd" >&2; exit 1; fi

cmd='regexp -s match "\\\((.*)\\\)" (hd0,msdos1); echo $match'
v=`echo "$cmd" | @builddir@/grub-shell`
if test "$v" != "hd0,msdos1"; then echo "error: $cmd" >&2; exit 1; fi

cmd='regexp -s match "hd([0-9]+)" hd0; echo $match'
v=`echo "$cmd" | @builddir@/grub-shell`
if test "$v" != "0"; then echo "error: $cmd" >&2; exit 1; fi
