The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use warnings;
use strict;

use Test::More tests => 3 + 3 + 6;

use JSON::RPC::LWP;

note q[setting 'from' during object creation];
{
  # 3
  my $email = 'user@example.com';
  my $rpc = new_ok(
    'JSON::RPC::LWP',
    [ from => $email ],
  );

  is $rpc->from, $email, q['from' attribute set];
  is $rpc->ua->from, $email, q['ua->from' has the same value];
}

note q[setting 'prefer_get' during object creation];
{
  # 3
  my $rpc = new_ok(
    'JSON::RPC::LWP',
    [ prefer_get => 1 ],
  );

  is $rpc->prefer_get, 1, q['prefer_get' attribute set];
  is $rpc->marshal->prefer_get, 1, q['marshal->prefer_get' has the same value];
};

sub type_constraint_error{
  my($error) = @_;
  $error = $@ unless $error;
  $error =~ /does not pass the type constraint/;
}

note q[Setting 'version' attribute];
{
  # 6

  my $rpc = new_ok(
    'JSON::RPC::LWP',
    [ version => 1.0 ],
  );

  is $rpc->version, '1.0', q['version' attribute has been set correctly];

  local $@;
  eval{
    $rpc->version(0);
  };
  ok type_constraint_error($@), 'fail when trying to set version to 0';

  local $@;
  eval{
    $rpc->version(1.01);
  };
  ok type_constraint_error($@), 'fail when trying to set version to 1.01';

  $rpc->version(1.1);
  is $rpc->version, 1.1, 'set version to 1.1';

  $rpc->version(1);
  is $rpc->version, '1.0', 'set version to 1 => 1.0';
}