139 lines
4.2 KiB
Perl
139 lines
4.2 KiB
Perl
# Licensed to the Apache Software Foundation (ASF) under one or more
|
|
# contributor license agreements. See the NOTICE file distributed with
|
|
# this work for additional information regarding copyright ownership.
|
|
# The ASF licenses this file to You under the Apache License, Version 2.0
|
|
# (the "License"); you may not use this file except in compliance with
|
|
# the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
package Apache::TestHarnessPHP;
|
|
|
|
use strict;
|
|
use warnings FATAL => 'all';
|
|
|
|
use File::Spec::Functions qw(catfile catdir);
|
|
use File::Find qw(finddepth);
|
|
use Apache::TestHarness ();
|
|
use Apache::TestTrace;
|
|
use Apache::TestConfig ();
|
|
|
|
use vars qw(@ISA);
|
|
@ISA = qw(Apache::TestHarness);
|
|
use TAP::Formatter::Console;
|
|
use TAP::Harness;
|
|
|
|
sub get_tests {
|
|
|
|
my $self = shift;
|
|
my $args = shift;
|
|
my @tests = ();
|
|
|
|
my $base = -d 't' ? catdir('t', '.') : '.';
|
|
|
|
my $ts = $args->{tests} || [];
|
|
|
|
if (@$ts) {
|
|
for (@$ts) {
|
|
if (-d $_) {
|
|
push(@tests, sort <$base/$_/*.t>);
|
|
push(@tests, sort <$base/$_/*.php>);
|
|
}
|
|
else {
|
|
$_ .= ".t" unless /(\.t|\.php)$/;
|
|
push(@tests, $_);
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if ($args->{tdirs}) {
|
|
push @tests, map { sort <$base/$_/*.t> } @{ $args->{tdirs} };
|
|
push @tests, map { sort <$base/$_/*.php> } @{ $args->{tdirs} };
|
|
}
|
|
else {
|
|
finddepth(sub {
|
|
return unless /\.(t|php)$/;
|
|
return if $File::Find::dir =~ m/\b(conf|htdocs|logs|response)\b/;
|
|
my $t = catfile $File::Find::dir, $_;
|
|
my $dotslash = catfile '.', "";
|
|
$t =~ s:^\Q$dotslash::;
|
|
push @tests, $t
|
|
}, $base);
|
|
@tests = sort @tests;
|
|
}
|
|
}
|
|
|
|
@tests = $self->prune(@tests);
|
|
|
|
if (my $skip = $self->skip) {
|
|
# Allow / \ and \\ path delimiters in SKIP file
|
|
$skip =~ s![/\\\\]+![/\\\\]!g;
|
|
|
|
@tests = grep { not /(?:$skip)/ } @tests;
|
|
}
|
|
|
|
Apache::TestSort->run(\@tests, $args);
|
|
|
|
#when running 't/TEST t/dir' shell tab completion adds a /
|
|
#dir//foo output is annoying, fix that.
|
|
s:/+:/:g for @tests;
|
|
|
|
# remove *.php tests unless we can run them with php
|
|
if (! Apache::TestConfig::which('php')) {
|
|
warning(join ' - ', 'skipping *.php tests',
|
|
'make sure php is in your PATH');
|
|
@tests = grep { not /\.php$/ } @tests;
|
|
}
|
|
elsif (! $phpclient) {
|
|
warning(join ' - ', 'skipping *.php tests',
|
|
'Test::Harness 2.38 not available');
|
|
@tests = grep { not /\.php$/ } @tests;
|
|
}
|
|
|
|
return @tests;
|
|
}
|
|
|
|
sub run {
|
|
my $self = shift;
|
|
my $args = shift || {};
|
|
my $formatter = TAP::Formatter::Console->new;
|
|
my $agg = TAP::Parser::Aggregator->new;
|
|
my $verbose = $args->{verbose} && $args->{verbose};
|
|
my $php_harness = TAP::Harness->new
|
|
({exec => $self->command_line(),
|
|
verbosity => $verbose});
|
|
my $perl_harness = TAP::Harness->new
|
|
({verbosity => $verbose});
|
|
my @tests = $self->get_tests($args, @_);
|
|
|
|
$agg->start();
|
|
$php_harness->aggregate_tests($agg, grep {m{\.php$}} @tests);
|
|
$perl_harness->aggregate_tests($agg, grep {m{\.t$}} @tests);
|
|
$agg->stop();
|
|
|
|
$formatter->summary($agg);
|
|
}
|
|
|
|
sub command_line {
|
|
my $self = shift;
|
|
|
|
my $server_root = Apache::Test::vars('serverroot');
|
|
|
|
my $conf = catfile($server_root, 'conf');
|
|
|
|
my $ini = catfile($conf, 'php.ini');
|
|
|
|
my $php = Apache::TestConfig::which('php') ||
|
|
die 'no php executable found in ' . $ENV{PATH};
|
|
|
|
return ["env", "SERVER_ROOT=$server_root",
|
|
$php, "--php-ini", $ini, "--define", "include_path=$conf"];
|
|
}
|
|
|
|
1;
|