#!/usr/bin/perl
#
# Copyright (C) 2009 Chris Jerdonek (chris.jerdonek@gmail.com)
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# 
#     * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#     * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
#     * Neither the name of Google Inc. nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
# 
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Runs unit tests of WebKit Perl code.

use strict;
use warnings;

use File::Spec;
use FindBin;
use Test::Harness;
use lib $FindBin::Bin; # so this script can be run from any directory.
use VCSUtils;

# Change the working directory so that we can pass shorter, relative
# paths to runtests(), rather than longer, absolute paths.
#
# We change to the source root so the paths can be relative to the
# source root. These paths display on the screen, and their meaning
# will be clearer to the user if relative to the root, rather than to
# the Scripts directory, say.
#
# Source root is two levels up from the Scripts directory.
my $sourceRootDir = File::Spec->catfile($FindBin::Bin, "../..");
chdir($sourceRootDir);

# Relative to root
my $pattern = "Tools/Scripts/webkitperl/*_unittest/*.pl";

my @files = <${pattern}>; # lists files alphabetically

runtests(@files);
