/
str.t
104 lines (87 loc) 路 2.5 KB
/
str.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
use Test;
plan 34;
{
ok "0","'0' is true";
is "".WHAT,Str,'empty string .WHAT is Str';
is "foo".WHAT,Str,'non-empty strnig .WHAT is Str';
is "1".WHAT,Str,'"1" .WHAT is Str';
nok ?"", '?""';
ok ?" ", '?" "';
}
{
is "foo".uc ,"FOO",'.uc';
is "FOO".lc,'foo','.lc';
}
{
my @words = <foo m酶酶se r谩ntottcsirke>;
my @bytes = 3, 7, 14;
#XXX: Temporarily (hopefully) cheating for non-utf8 terminals.
#Needed because wc uses the locale to do char count
my @chars = Locale.encoding eq 'UTF-8' ?? <3 5 13> !! <3 7 14>;
for ^@words {
is @words[$_].chars,@chars[$_],"$_ correct chars";
is @words[$_].bytes,@bytes[$_],"$_ correct bytes";
}
}
{
my $str = "foo|bar|baz";
my @str = <foo bar baz>;
is $str.split('|'),@str,'split on |';
is @str.elems,3,'correct elems from split';
}
{
my $str = 'foo"bar"baz';
my @str = <foo bar baz>;
is $str.split('"'),@str,'split on "';
}
{
my $str = "abc";
my @str = <a b c>;
is $str.split(""),@str,"split on ''";
}
{
my $str = "lor.+em ipsum";
ok $str.contains('or.+em'),'contains treats string literally';
nok $str.contains('or.*em'),'contains treats string literaly';
}
{
my $str = "lorem\nipsum";
ok $str.contains("m\ni"),'needle with newline';
}
{
my $str = "\nfoo";
ok $str.contains("\nfo"),'needle starting with newline (true)';
nok $str.contains("\na"),'needle starting with newline (false)';
}
{
my $str = "lOrEm ipsum";
nok $str.contains("lorem ipsum"),'contains is case sensitive by default';
ok $str.contains("lorem ipsum",:i),'.contains :i';
ok $str.contains('LOREM',:i),'.contains with uc arg :i';
ok qq{if True {\n foo\n}}.contains(qq{if True {\n foo\n}}),
'multi-line contains';
nok qq{if True {\n foo\n}}.contains(qq{if True {\n foo\n after}}),
'multi-line contains (false)';
}
{
nok "".contains("a"), '"".contains("a")';
ok "".contains(""), '"".contains("")';
}
{
given File.tmp {
.write('%foo');
is .slurp.uc.write-to($_), '%FOO', '.write-to returns what it writes';
is .slurp, '%FOO', '.slurp...write-to($_)';
}
}
{
File.tmp(:dir).cd;
my $to-archive = File.tmp(:dir);
$to-archive.add('foo.txt').touch;
my $archive = $to-archive.archive;
File.tmp(:dir).cd;
my $extracted = $archive.slurp.extract;
$archive.remove;
ok $extracted.d, 'Str.extract result is a directory';
ok $extracted.add('foo.txt'), 'foo.txt exists inside';
}