@@ -3,7 +3,7 @@ use lib 't/spec/packages';
3
3
use Test ;
4
4
use Test ::Util;
5
5
6
- plan 180 ;
6
+ plan 181 ;
7
7
8
8
# L<S05/Substitution/>
9
9
@@ -576,4 +576,51 @@ is '12'.subst(/(.)(.)/,{$()*2}),'24', '.. and do nifty things in closures';
576
576
}, ' code in replacement part of s/// has correct scoping' ;
577
577
}
578
578
579
+ { # coverage; 2016-09-27
580
+ subtest ' Cool.subst-mutate works same as on .Str' => {
581
+ my @ tests = # args | returned stringified Match objects | result
582
+ [ \(' ' , ' ' ), ' ' , " aabbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
583
+ [ \(' ' , ' ' , : g), (' ' xx 20 ), " aabbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
584
+ [ \(' ' , ' ' , : global), (' ' xx 20 ), " aabbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
585
+ [ \(' a' , ' ' ), ' a' , " abbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
586
+ [ \(' a' , ' ' , : g), (' a' , ' a' ), " bbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
587
+ [ \(' a' , ' ' , : global), (' a' , ' a' ), " bbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
588
+ [ \(' b' , ' ' ), ' b' , " aabb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
589
+ [ \(' b' , ' ' , : g), (' b' , ' b' ), " aab\x [ 308] b\x [ 308] cc \t xz \t y" , ],
590
+ [ \(' b' , ' ' , : global), (' b' , ' b' ), " aab\x [ 308] b\x [ 308] cc \t xz \t y" , ],
591
+ [ \(/<[ abc ] > /, ' ' ), ' a' , " abbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
592
+ [ \(/<[ abc ] > /, ' ' , : g), (' a' , ' a' , ' b' , ' b' , ' c' , ' c' ), " b\x [ 308] b\x [ 308] \t xz \t y" , ],
593
+ [ \(/<[ abc ] > /, ' ' , : global), (' a' , ' a' , ' b' , ' b' , ' c' , ' c' ), " b\x [ 308] b\x [ 308] \t xz \t y" , ],
594
+ [ \(/<[ abc ] > /, ' ' , : 1 st), ' a' , " abbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
595
+ [ \(/<[ abc ] > /, ' ' , : st{1 ;}), ' a' , " abbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
596
+ [ \(/<[ abc ] > /, ' ' , : 2 nd), ' a' , " abbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
597
+ [ \(/<[ abc ] > /, ' ' , : nd{2 ;}), ' a' , " abbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
598
+ [ \(/<[ abc ] > /, ' ' , : 3 rd), ' b' , " aabb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
599
+ [ \(/<[ abc ] > /, ' ' , : rd{3 ;}), ' b' , " aabb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
600
+ [ \(/<[ abc ] > /, ' ' , : 4 th), ' b' , " aabb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
601
+ [ \(/<[ abc ] > /, ' ' , : th{4 ;}), ' b' , " aabb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
602
+ [ \(/<[ abc ] > /, ' ' , : 5 nth), ' c' , " aabbb\x [ 308] b\x [ 308] c \t xz \t y" , ],
603
+ [ \(/<[ abc ] > /, ' ' , : nth{5 ;}), ' c' , " aabbb\x [ 308] b\x [ 308] c \t xz \t y" , ],
604
+ [ \(/<[ cz ] > \s + <[ xy ] > /, ' Z P' , : ss), " c \t x" , " aabbb\x [ 308] b\x [ 308] cZ \t Pz \t y" , ],
605
+ [ \(/<[ cz ] > \s + <[ xy ] > /, ' Z P' , : ss, : global), ( " c \t x" , " z \t y" ), " aabbb\x [ 308] b\x [ 308] cZ \t PZ \t P" , ],
606
+ [ \(' a' , ' Z' , : ii), ' a' , " zabbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
607
+ [ \(' a' , ' Z' , : ii, : global), ( ' a' , ' a' ), " zzbbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
608
+ [ \(/<[ b ] + [ b\x [ 308] ] > /, ' Z' , : mm), ' b' , " aaZbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
609
+ [ \(/<[ b ] + [ b\x [ 308] ] > /, ' Z' , : mm, : global), ( ' b' , ' b' , " b\x [ 308] " , " b\x [ 308] " ), " aaZZZ\x [ 308] Z\x [ 308] cc \t xz \t y" , ],
610
+ [ \(/<[ b ] + [ b\x [ 308] ] > /, ' Z' , : ii, : mm), ' b' , " aazbb\x [ 308] b\x [ 308] cc \t xz \t y" , ],
611
+ [ \(/<[ b ] + [ b\x [ 308] ] > /, ' Z' , : ii, : mm, : global), ( ' b' , ' b' , " b\x [ 308] " , " b\x [ 308] " ), " aazzz\x [ 308] z\x [ 308] cc \t xz \t y" , ],
612
+ ;
613
+
614
+ plan 2 * @ tests ;
615
+ for @ tests -> $ t {
616
+ # use IO::Path as our Cool object
617
+ my $ obj = " aabbb\x [ 308] b\x [ 308] cc \t xz \t y" . IO ;
618
+ my $ ret = $ obj . subst-mutate(| $ t [0 ]);
619
+ is-deeply ( $ ret ~~ Iterable ?? $ ret ». Str !! $ ret . Str ), $ t [1 ],
620
+ " correct return value when using $ t[ 0 ] . gist ()" ;
621
+ is-deeply $ obj , $ t [2 ], " correct modification when using $ t[ 0 ] . gist ()" ;
622
+ }
623
+ }
624
+ }
625
+
579
626
# vim: ft=perl6
0 commit comments