Aion
view release on metacpan or search on metacpan
t/aion/type.t view on Meta::CPAN
use common::sense; use open qw/:std :utf8/; use Carp qw//; use Cwd qw//; use File::Basename qw//; use File::Find qw//; use File::Slurper qw//; use File::Spec qw//; use File::Path qw//; use Scalar::Util qw//; use Test::More 0.98; use String::Diff q...
# # NAME
#
# Aion::Type - клаÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑоÑов
#
# # SYNOPSIS
#
subtest 'SYNOPSIS' => sub {
use Aion::Type;
use Aion::Types qw//;
my $Int = Aion::Type->new(name => "Int", test => sub { /^-?\d+$/ });
local ($::_g0 = do {12 ~~ $Int}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '12 ~~ $Int # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {12.1 ~~ $Int}, $::_e0 = do {""}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, '12.1 ~~ $Int # -> ""' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
my $Char = Aion::Type->new(name => "Char", test => sub { /^.\z/ });
local ($::_g0 = do {$Char->include("a")}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '$Char->include("a") # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {$Char->exclude("ab")}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '$Char->exclude("ab") # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
my $IntOrChar = $Int | $Char;
local ($::_g0 = do {77 ~~ $IntOrChar}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '77 ~~ $IntOrChar # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {"a" ~~ $IntOrChar}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '"a" ~~ $IntOrChar # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {"ab" ~~ $IntOrChar}, $::_e0 = do {""}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, '"ab" ~~ $IntOrChar # -> ""' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
my $Digit = $Int & $Char;
local ($::_g0 = do {7 ~~ $Digit}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '7 ~~ $Digit # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {77 ~~ $Digit}, $::_e0 = do {""}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, '77 ~~ $Digit # -> ""' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {"a" ~~ ~$Int;}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '"a" ~~ ~$Int; # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {5 ~~ ~$Int;}, $::_e0 = do {""}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, '5 ~~ ~$Int; # -> ""' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
::like scalar do {eval { $Int->validate("a", "..Eval..") }; $@}, qr{..Eval.. must have the type Int. The it is 'a'}, 'eval { $Int->validate("a", "..Eval..") }; $@ # ~> ..Eval.. must have the type Int. The it is \'a\''; undef $::_g0; undef $::_e0;
#
# # DESCRIPTION
#
# ÐоÑÐ¾Ð¶Ð´Ð°ÐµÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑоÑÑ. ÐÑполÑзÑеÑÑÑ Ð² `Aion::Types::subtype`.
#
# # METHODS
#
# ## new (%ARGUMENTS)
#
# ÐонÑÑÑÑкÑоÑ.
#
# ### ARGUMENTS
#
# * name (Str) â Ðазвание Ñипа.
# * args (ArrayRef) â СпиÑок аÑгÑменÑов Ñипа.
# * init (CodeRef) â ÐниÑиализаÑÐ¾Ñ Ñипа.
# * test (CodeRef) â ЧекеÑ.
# * a_test (CodeRef) â Ð§ÐµÐºÐµÑ Ð·Ð½Ð°Ñений Ð´Ð»Ñ Ñипов Ñ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑми аÑгÑменÑами.
# * coerce (ArrayRef[Tuple[Aion::Type, CodeRef]]) â ÐаÑÑив паÑ: Ñип и пеÑеÑ
од.
#
# ## stringify
#
# СÑÑоковое пÑеобÑазование обÑекÑа (Ð¸Ð¼Ñ Ñ Ð°ÑгÑменÑами):
#
::done_testing; }; subtest 'stringify' => sub {
my $Char = Aion::Type->new(name => "Char");
local ($::_g0 = do {$Char->stringify}, $::_e0 = "Char"); ::ok $::_g0 eq $::_e0, '$Char->stringify # => Char' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
t/aion/type.t view on Meta::CPAN
#
# ## superset ($type)
#
# ÐпÑеделÑеÑ, ÑÑо он ÑвлÑеÑÑÑ Ð½Ð°Ð´Ð¼Ð½Ð¾Ð¶ÐµÑÑвом Ñказанного Ñипа.
#
# ## subproper ($other)
#
# Тип ÑвлÑеÑÑÑ ÑÑÑогим подмножеÑÑвом дÑÑгого.
#
# ## superproper ($other)
#
# Тип ÑвлÑеÑÑÑ ÑÑÑогим надмножеÑÑвом дÑÑгого.
#
# ## equals ($other)
#
# Тип ÑквиваленÑен дÑÑÐ³Ð¾Ð¼Ñ ÑипÑ.
#
# ## differs ($other)
#
# Тип не ÑквиваленÑен дÑÑÐ³Ð¾Ð¼Ñ ÑипÑ.
#
# ## disjoint ($other)
#
# Тип не Ð¸Ð¼ÐµÐµÑ Ð¿ÐµÑеÑеÑений Ñ Ð´ÑÑгим Ñипом.
#
# ## intersects ($other)
#
# Тип Ð¸Ð¼ÐµÐµÑ Ð¿ÐµÑеÑеÑение или пеÑеÑеÑÐµÐ½Ð¸Ñ Ñ Ð´ÑÑгим Ñипом.
#
# ## make ($pkg)
#
# СоздаÑÑ Ð¿Ð¾Ð´Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð±ÐµÐ· аÑгÑменÑов, коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ñип.
#
::done_testing; }; subtest 'make ($pkg)' => sub {
BEGIN {
Aion::Type->new(name=>"Rim", test => sub { /^[IVXLCDM]+$/i })->make(__PACKAGE__);
}
local ($::_g0 = do {"IX" ~~ Rim}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '"IX" ~~ Rim # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
#
# ÐÑли Ñказан `init` Ñо пÑи каждом иÑполÑзовании подпÑогÑÐ°Ð¼Ð¼Ñ Ð±ÑÐ´ÐµÑ ÑоздаваÑÑÑÑ Ñип и иниÑиализиÑоваÑÑÑÑ.
#
::like scalar do {eval { Aion::Type->new(name=>"Rim", init => sub {...})->make(__PACKAGE__) }; $@}, qr{init_where won't work in Rim}, 'eval { Aion::Type->new(name=>"Rim", init => sub {...})->make(__PACKAGE__) }; $@ # ~> init_where won\'t work in Rim'...
#
# ÐÑли подпÑогÑамма не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñоздана, Ñо вÑбÑаÑÑваеÑÑÑ Ð¸ÑклÑÑение.
#
::like scalar do {eval { Aion::Type->new(name=>"Rim")->make }; $@}, qr{syntax error}, 'eval { Aion::Type->new(name=>"Rim")->make }; $@ # ~> syntax error'; undef $::_g0; undef $::_e0;
#
# ## make_arg ($pkg)
#
# Ð¡Ð¾Ð·Ð´Ð°ÐµÑ Ð¿Ð¾Ð´Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ñ Ð°ÑгÑменÑами, коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ñип.
#
::done_testing; }; subtest 'make_arg ($pkg)' => sub {
BEGIN {
Aion::Type->new(name=>"Len", test => sub {
$Aion::Type::SELF->{args}[0] <= length($_) && length($_) <= $Aion::Type::SELF->{args}[1]
})->make_arg(__PACKAGE__, 1);
}
local ($::_g0 = do {"IX" ~~ Len[2,2]}, $::_e0 = "1"); ::ok $::_g0 eq $::_e0, '"IX" ~~ Len[2,2] # => 1' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
#
# ÐÑли подпÑогÑамма не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñоздана, Ñо вÑбÑаÑÑваеÑÑÑ Ð¸ÑклÑÑение.
#
::like scalar do {eval { Aion::Type->new(name=>"Rim")->make_arg }; $@}, qr{syntax error}, 'eval { Aion::Type->new(name=>"Rim")->make_arg }; $@ # ~> syntax error'; undef $::_g0; undef $::_e0;
#
# ## make_maybe_arg ($pkg)
#
# Ð¡Ð¾Ð·Ð´Ð°ÐµÑ Ð¿Ð¾Ð´Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ñ Ð°ÑгÑменÑами или без.
#
::done_testing; }; subtest 'make_maybe_arg ($pkg)' => sub {
BEGIN {
Aion::Type->new(
name => "Enum123",
test => sub { $_ ~~ [1,2,3] },
a_test => sub { $_ ~~ $Aion::Type::SELF->{args} },
)->make_maybe_arg(__PACKAGE__);
}
local ($::_g0 = do {3 ~~ Enum123}, $::_e0 = do {1}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, '3 ~~ Enum123 # -> 1' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {3 ~~ Enum123[4,5,6]}, $::_e0 = do {""}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, '3 ~~ Enum123[4,5,6] # -> ""' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {5 ~~ Enum123[4,5,6]}, $::_e0 = do {1}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, '5 ~~ Enum123[4,5,6] # -> 1' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
#
# ÐÑли подпÑогÑамма не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñоздана, Ñо вÑбÑаÑÑваеÑÑÑ Ð¸ÑклÑÑение.
#
::like scalar do {eval { Aion::Type->new(name=>"Rim")->make_maybe_arg }; $@}, qr{syntax error}, 'eval { Aion::Type->new(name=>"Rim")->make_maybe_arg }; $@ # ~> syntax error'; undef $::_g0; undef $::_e0;
#
# ## args ()
#
# СпиÑок аÑгÑменÑов.
#
# ## name ()
#
# ÐÐ¼Ñ Ñипа.
#
# ## as ()
#
# РодиÑелÑÑкий Ñип.
#
# ## message (;&message)
#
# ÐкÑеÑÑÐ¾Ñ ÑообÑениÑ. ÐÑполÑзÑÐµÑ `&message` Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибке.
#
# ## title (;$title)
#
# ÐкÑеÑÑÐ¾Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ° (иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑ
ÐµÐ¼Ñ **swagger**).
#
# ## description (;$description)
#
# ÐкÑеÑÑÐ¾Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ (иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑ
ÐµÐ¼Ñ **swagger**).
#
( run in 0.497 second using v1.01-cache-2.11-cpan-aadc1410aed )