The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use Test::More tests => 4;

# This script tests whether UML::Class::Simple draws a diagram
# that only includes modules that appear when using the target module.

# UML::Class::Simple should not draw any modules that appear
# only as a side effect of using UML::Class::Simple, PPI, etc.

#use Smart::Comments;
use lib "lib";
use lib "t/data";

use_ok UML::Class::Simple;
use_ok UMLClassTest;

{
  my @expected = map { chomp; $_ } sort { $a cmp $b }
                 `$^X -It/data t/data/classes-from-runtime.pl`;
  my @got = grep { $_ } sort { $a cmp $b } classes_from_runtime("UMLClassTest");
  ## @expected
  ## @got
  ok contain(\@got, \@expected), 'Find the modules that are loaded';
}

{
  my @expected = map { chomp; $_ } sort { $a cmp $b } `$^X t/data/filespec.pl`;
  my @got = grep { $_ } sort { $a cmp $b } classes_from_runtime("File::Spec");
  ok contain(\@got, \@expected), 'Same test; dependency overlap with U::C::S';
}

sub contain {
    my ($got, $expected) = @_;
    my $pass = 1;
    for my $a (@$expected) {
      my $done;
      for my $b (@$got) {
          if ($a eq $b) {
              ### found a: $a
              ### found b: $b
              $done = 1;
              last;
          }
      }
      next if $done;
      undef $pass;
      last;
    }
    return $pass;
}