Liveman

 view release on metacpan or  search on metacpan

t/liveman.t  view on Meta::CPAN

local ($::_g0 = do {'abbc'}, $::_e0 = 'ab'); ::ok $::_g0 =~ /^${\quotemeta $::_e0}/, '\'abbc\' # ^-> ab' or ::diag ::_string_diff($::_g0, $::_e0, 1); undef $::_g0; undef $::_e0;
local ($::_g0 = do {'abc'}, $::_e0 = 'ab'); ::ok $::_g0 =~ /^${\quotemeta $::_e0}/, '\'abc\'  # ↣ ab' or ::diag ::_string_diff($::_g0, $::_e0, 1); undef $::_g0; undef $::_e0;

# 
# ### `like` ends with nonextrapolate-string
# 
# Скаляр должен заканчиваться неэкстраполированой срокой:
# 
::done_testing; }; subtest '`like` ends with nonextrapolate-string' => sub { 
local ($::_g0 = do {'abbc'}, $::_e0 = 'bc'); ::ok $::_g0 =~ /${\quotemeta $::_e0}$/, '\'abbc\' # $-> bc' or ::diag ::_string_diff($::_g0, $::_e0, -1); undef $::_g0; undef $::_e0;
local ($::_g0 = do {'abc'}, $::_e0 = 'bc'); ::ok $::_g0 =~ /${\quotemeta $::_e0}$/, '\'abc\'  # ⇥ bc' or ::diag ::_string_diff($::_g0, $::_e0, -1); undef $::_g0; undef $::_e0;

# 
# ### `like` inners with nonextrapolate-string
# 
# Скаляр должен содержать неэкстраполированую сроку:
# 
::done_testing; }; subtest '`like` inners with nonextrapolate-string' => sub { 
local ($::_g0 = do {'abbc'}, $::_e0 = 'bb'); ::ok $::_g0 =~ quotemeta $::_e0, '\'abbc\' # *-> bb' or ::diag ::_string_diff($::_g0, $::_e0, 0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {'abc'}, $::_e0 = 'b'); ::ok $::_g0 =~ quotemeta $::_e0, '\'abc\'  # ⥵ b' or ::diag ::_string_diff($::_g0, $::_e0, 0); undef $::_g0; undef $::_e0;

# 
# ### `like` throw begins with nonextrapolate-string
# 
# Исключение должно начинаться с неэкстраполированой сроки:
# 
::done_testing; }; subtest '`like` throw begins with nonextrapolate-string' => sub { 
eval {1/0}; local ($::_g0 = $@, $::_e0 = 'Illegal division by zero'); ok defined($::_g0) && $::_g0 =~ /^${\quotemeta $::_e0}/, '1/0 # @-> Illegal division by zero' or ::diag ::_string_diff($::_g0, $::_e0, 1); undef $::_g0; undef $::_e0;
eval {1/0}; local ($::_g0 = $@, $::_e0 = 'Illegal division by zero'); ok defined($::_g0) && $::_g0 =~ /^${\quotemeta $::_e0}/, '1/0 # ↯ Illegal division by zero' or ::diag ::_string_diff($::_g0, $::_e0, 1); undef $::_g0; undef $::_e0;

# 
# ### `like` throw begins with extrapolate-string
# 
# Исключение должно начинаться с экстраполированой сроки:
# 
::done_testing; }; subtest '`like` throw begins with extrapolate-string' => sub { 
my $by = 'by';

eval {1/0}; local ($::_g0 = $@, $::_e0 = "Illegal division $by zero"); ok defined($::_g0) && $::_g0 =~ /^${\quotemeta $::_e0}/, '1/0 # @=> Illegal division $by zero' or ::diag ::_string_diff($::_g0, $::_e0, 1); undef $::_g0; undef $::_e0;
eval {1/0}; local ($::_g0 = $@, $::_e0 = "Illegal division $by zero"); ok defined($::_g0) && $::_g0 =~ /^${\quotemeta $::_e0}/, '1/0 # ⤯ Illegal division $by zero' or ::diag ::_string_diff($::_g0, $::_e0, 1); undef $::_g0; undef $::_e0;

# 
# ### `like` throw
# 
# Исключение должно быть сопостовимо с регулярным выражением:
# 
::done_testing; }; subtest '`like` throw' => sub { 
eval {1/0}; local ($::_g0 = $@, $::_e0 = qr{division\s*by\s*zero}); ok defined($::_g0) && $::_g0 =~ $::_e0, '1/0 # @~> division\s*by\s*zero' or ::diag defined($::_g0)? "Got:$::_g0": 'Got is undef'; undef $::_g0; undef $::_e0;
eval {1/0}; local ($::_g0 = $@, $::_e0 = qr{division\s*by\s*zero}); ok defined($::_g0) && $::_g0 =~ $::_e0, '1/0 # ⇝ division\s*by\s*zero' or ::diag defined($::_g0)? "Got:$::_g0": 'Got is undef'; undef $::_g0; undef $::_e0;

# 
# ### `unlike` throw
# 
# Исключение не должно быть сопостовимо с регулярным выражением (но оно должно иметь место):
# 
::done_testing; }; subtest '`unlike` throw' => sub { 
eval {1/0}; local ($::_g0 = $@, $::_e0 = qr{auto}); ok defined($::_g0) && $::_g0 !~ $::_e0, '1/0 # <~@ auto' or ::diag defined($::_g0)? "Got:$::_g0": 'Got is undef'; undef $::_g0; undef $::_e0;
eval {1/0}; local ($::_g0 = $@, $::_e0 = qr{auto}); ok defined($::_g0) && $::_g0 !~ $::_e0, '1/0 # ⇜ auto' or ::diag defined($::_g0)? "Got:$::_g0": 'Got is undef'; undef $::_g0; undef $::_e0;

# 
# ## EMBEDDING FILES
# 
# Каждый тест выполняется во временном каталоге, который удаляется и создается при запуске теста.
# 
# Формат этого каталога: /tmp/.liveman/*project*/*path-to-test*/.
# 
# Раздел кода в строке с префиксом md-файла **File `path`:** запишется в файл при тестировании во время выполнения.
# 
# Раздел кода в префиксной строке md-файла **File `path` is:** будет сравниваться с файлом методом `Test::More::is`.
# 
# Файл experiment/test.txt:
#@> experiment/test.txt
#>> hi!
#@< EOF
# 
# Файл experiment/test.txt является:
{ my $s = 'experiment/test.txt'; open my $__f__, '<:utf8', $s or die "Read $s: $!"; my $got = join '', <$__f__>; close $__f__; my $expected = 'hi!
'; ::ok $got eq $expected, 'File experiment/test.txt' or ::diag ::_string_diff($got, $expected) }
# 
# **Внимание!** Пустая строка между префиксом и кодом не допускается!
# 
# Эти префиксы могут быть как на английском, так и на русском (`File [path](https://metacpan.org/pod/path):` и `File [path](https://metacpan.org/pod/path) is:`).
# 
# # METHODS
# 
# ## new (%param)
# 
# Конструктор. Имеет аргументы:
# 
# 1. `files` (array_ref) — список md-файлов для методов `transforms` и `tests`.
# 1. `open` (boolean) — открыть покрытие в браузере. Если на компьютере установлен браузер **opera**, то будет использоватся команда `opera` для открытия...
# 1. `force_compile` (boolean) — не проверять время модификации md-файлов.
# 1. `options` — добавить параметры в командной строке для проверки или доказательства.
# 1. `prove` — использовать доказательство (команду `prove` для запуска тестов), а не команду `yath`.
# 
# ## test_path ($md_path)
# 
# Получить путь к `t/**.t`-файлу из пути к `lib/**.md`-файлу:
# 
::done_testing; }; subtest 'test_path ($md_path)' => sub { 
local ($::_g0 = do {Liveman->new->test_path("lib/PathFix/RestFix.md")}, $::_e0 = "t/path-fix/rest-fix.t"); ::ok $::_g0 eq $::_e0, 'Liveman->new->test_path("lib/PathFix/RestFix.md") # => t/path-fix/rest-fix.t' or ::diag ::_string_diff($::_g0, $::_e0);...

# 
# ## transform ($md_path, [$test_path])
# 
# Компилирует `lib/**.md`-файл в `t/**.t`-файл.
# 
# А так же заменяет **pod**-документацию в секции `__END__` в `lib/**.pm`-файле и создаёт `lib/**.pm`-файл, если тот существует, а иначе – создаёт файл`lib/**.pod`...
# 
# При вызове `transform` в `SYNOPSYS` был создан файл `lib/Example.pod`.
# 
# Файл lib/Example.pod является:
{ my $s = 'lib/Example.pod'; open my $__f__, '<:utf8', $s or die "Read $s: $!"; my $got = join '', <$__f__>; close $__f__; my $expected = 'Twice two:

	2*2  # -> 2+2

'; ::ok $got eq $expected, 'File lib/Example.pod' or ::diag ::_string_diff($got, $expected) }
# 
# Создадим `lib/Example.pm` и вызовем `transform`:
# 
::done_testing; }; subtest 'transform ($md_path, [$test_path])' => sub { 



( run in 0.689 second using v1.01-cache-2.11-cpan-71847e10f99 )