#!/usr/bin/env perl
use strict;
use warnings;
use Test::More tests => 146;
use NetHack::Item;
use NetHack::Item::Spoiler;
my $spoiler = "NetHack::Item::Spoiler";
my @artifacts;
for my $type ($spoiler->spoiler_types) {
my $list = $type->list;
push @artifacts, grep { $_->{artifact} } values %$list;
}
is(@artifacts, 37, "NetHack has 37 artifacts (apparently)");
my @baseless = grep { !$_->{base} } @artifacts;
is(@baseless, 4, "four base-less artifacts (invocation items + Amulet");
for my $artifact (@artifacts) {
my $item = NetHack::Item->new($artifact->{name});
ok($item->spoiler, "got some spoiler data from the artifact");
ok($item->is_artifact, "the item is an artifact!");
if (grep { $_ == $artifact } @baseless) {
ok(!exists($artifact->{base}), "no base for the special artifacts");
next;
}
my $base = $artifact->{base};
my $possibilities = $spoiler->possibilities_for_appearance($base);
is(@$possibilities, 1, "1 identity for the base ($base) of $artifact->{name}");
my $identity = $possibilities->[0];
my $spoiler_data = $spoiler->spoiler_for($identity);
is($spoiler_data->{name}, $base, "base is identity");
}