160d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen#!/usr/bin/perl -w
260d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen
360d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen#
460d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen# Use this script to visit each python test case under the specified directory
560d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen# and invoke unittest.main() on each test case.
660d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen#
760d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen
860d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenuse strict;
960d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenuse FindBin;
1060d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenuse File::Find;
1160d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenuse File::Basename;
1260d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenuse Cwd;
1360d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenuse Cwd 'abs_path';
1460d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen
1560d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenscalar(@ARGV) == 1 or die "Usage: dotest.pl testdir";
1660d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen
1760d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenmy $scriptDir = $FindBin::Bin;
1860d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenmy $baseDir = abs_path("$scriptDir/..");
19acb708d91e0ba6bbd59f2b6b29b34f9b98413cf5Johnny Chenmy $pluginDir = "$baseDir/test/plugins";
2060d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenmy $testDir = $ARGV[0];
2160d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen
2260d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenmy $dbgPath = "$baseDir/build/Debug/LLDB.framework/Resources/Python";
2360d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenmy $relPath = "$baseDir/build/Release/LLDB.framework/Resources/Python";
2460d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenif (-d $dbgPath) {
25acb708d91e0ba6bbd59f2b6b29b34f9b98413cf5Johnny Chen  $ENV{'PYTHONPATH'} = "$dbgPath:$scriptDir:$pluginDir";
2660d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen} elsif (-d $relPath) {
27acb708d91e0ba6bbd59f2b6b29b34f9b98413cf5Johnny Chen  $ENV{'PYTHONPATH'} = "$relPath:$scriptDir:$pluginDir";
2860d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen}
2960d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen#print("ENV{PYTHONPATH}=$ENV{'PYTHONPATH'}\n");
3060d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen
3160d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen# Traverse the directory to find our python test cases.
3260d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chenfind(\&handleFind, $testDir);
3360d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen
3460d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chensub handleFind {
3560d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen  my $foundFile = $File::Find::name;
3660d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen  my $dir = getcwd;
3760d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen  #print("foundFile: $foundFile\n");
3860d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen
3960d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen  # Test*.py is the naming pattern for our test cases.
4060d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen  if ($foundFile =~ /.*\/(Test.*\.py)$/) {
4160d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen    print("Running python $1 (cwd = $dir)...\n");
4260d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen    system("python $1");
4360d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen  }
4460d45c53a78bf373e0ea29fc3f055b93878bd6afJohnny Chen}
45