package My::Suite::CTest;
use Cwd;

@ISA = qw(My::Suite);

sub list_cases {
  my ($self) = @_;
  keys %{$self->{ctests}}
}

sub start_test {
  my ($self, $tinfo)= @_;
  my $args=[ ];

  my $oldpwd=getcwd();
  chdir $::opt_vardir;
  my $proc=My::SafeProcess->new
           (
            name          => $tinfo->{shortname},
            path          => $self->{ctests}->{$tinfo->{shortname}},
            args          => \$args,
            append        => 1,
            output        => $::path_current_testlog,
            error         => $::path_current_testlog,
           );
  chdir $oldpwd;
  $proc;
}

{ 
  my $bin=$ENV{MTR_BINDIR} || '..';
  return "Not run for embedded server" if $::opt_embedded_server;
  return "Not configured to run ctest" unless -f "$bin/CTestTestfile.cmake";
  my ($ctest_vs)= $::opt_vs_config ? "-C ".substr($::opt_vs_config,1) : "";
  my (@ctest_list)= `cd $bin && ctest $ctest_vs --show-only --verbose`;
  return "No ctest" if $?;

  my ($command, %tests);
  for (@ctest_list) {
    chomp;
    $command= $' if /^\d+: Test command: +/;
    $tests{$'}=$command if /^ +Test +#\d+: +/;
  }
  bless { ctests => { %tests } };
}
