-
Notifications
You must be signed in to change notification settings - Fork 3
/
12-report-data.rakutest
118 lines (105 loc) · 3.57 KB
/
12-report-data.rakutest
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use Test;
use lib 'lib';
use App::Racoco::Report::DataPart;
use App::Racoco::Report::Data;
use App::Racoco::Paths;
use App::Racoco::X;
use lib 't/lib';
use TestResources;
use TestHelper;
plan 9;
my ($lib);
sub setup($lib-name?) {
plan $*plan;
if $lib-name {
TestResources::prepare($*subtest);
$lib = TestResources::exam-directory.add($lib-name);
}
}
'01-read-from-file'.&test(:6plan, {
setup('lib');
my ($data, $part);
lives-ok { $data = Data.read(:$lib) }, 'read from file';
ok $data, 'read defined';
$part = $data.for(file-name => 'ModuleName1.rakumod');
is $part, 'ModuleName1.rakumod | 37.5% | 1 0 2 3 3 1 5 0 6 0 7 0 8 0 | 4 1', 'part 1';
$part = $data.for(file-name => 'ModuleName2.rakumod');
is $part, 'ModuleName2.rakumod | 28.5% | 1 0 2 3 3 1 5 0 6 0 7 0 8 0', 'part 2';
$part = $data.for(file-name => 'ModuleName3.rakumod');
is $part, 'ModuleName3.rakumod | 0% | 1 0 2 0 3 0', 'part 3';
nok $data.for(file-name => 'NotExists'), 'not exists';
});
'02-read-not-exist'.&test(:1plan, {
setup('lib');
throws-like { Data.read(:$lib) }, CannotReadReport,
'read from not existed file', message => / $lib /;
});
'03-read-bad-header'.&test(:3plan, {
setup('lib');
my ($data);
lives-ok { $data = Data.read(:$lib) }, 'read from file';
ok $data, 'read defined';
nok $data.for(file-name => 'ModuleName1.rakumod'), 'not exists';
});
'04-read-corrupt'.&test(:5plan, {
setup('lib');
my ($data);
lives-ok { $data = Data.read(:$lib) }, 'read from file';
ok $data, 'read defined';
ok $data.for(file-name => 'ModuleName1.rakumod'), 'part 1 read';
ok $data.for(file-name => 'ModuleName2.r'), 'part 2 read';
nok $data.for(file-name => ''), 'part 3 not read';
});
'05-get-all-parts'.&test(:4plan, {
setup('lib');
my $parts := Data.read(:$lib).get-all-parts;
ok $parts ~~ Positional, 'all parts are Positional';
is $parts.elems, 2, 'read only two from corrupt';
is $parts[0], 'ModuleName1.rakumod | 37.5% | 1 0 2 3 3 1 5 0 6 0 7 0 8 0 | 4 1';
is $parts[1], 'ModuleName2.r | 100%';
});
'06-write-to-file'.&test(:2plan, {
setup('lib');
lives-ok { Data.read(:$lib).write(:$lib) }, 'write';
is report-data-path(:$lib).slurp, report-data-path(:$lib).parent.add('expected.txt').slurp, 'good write';
});
'07-construct'.&test(:2plan, {
setup('lib');
my %coverable =
'ModuleName1.rakumod', set(1, 2, 3, 5, 6, 7, 8),
'ModuleName2.r', set(),
'ModuleName3.rakumod', set(1, 2);
my %covered =
'ModuleName1.rakumod', bag(2, 2, 2, 3, 4),
'ModuleName2.r', bag();
my ($data);
lives-ok { $data = Data.new(:%coverable, :%covered) }, 'construct';
$data.write(:$lib);
is report-data-path(:$lib).slurp, report-data-path(:$lib).parent.add('expected.txt').slurp, 'good write';
});
'08-percent'.&test(:1plan, {
setup('lib');
is Data.read(:$lib).percent, 27.7, 'percent';
});
'09-plus'.&test(:3plan, {
setup('lib');
my $data1 = Data.new(
coverable => ('A1', set(1, 2, 3), 'A2', set(1, 2, 3)).Map,
covered => ('A1', bag(1, 2, 3), 'A2', bag(1, 2, 3)).Map
);
my $data2 = Data.new(
coverable => ('A3', set(1, 2, 3), 'A2', set(2, 3, 4)).Map,
covered => ('A3', bag(1, 2, 3), 'A2', bag(2, 3, 4)).Map
);
Data.new(
coverable => ('A1', set(1, 2, 3), 'A2', set(1, 2, 3, 4), 'A3', set(1, 2, 3)).Map,
covered => ('A1', bag(1, 2, 3), 'A2', bag(1, 2, 2, 3, 3, 4), 'A3', bag(1, 2, 3)).Map
).write(:$lib);
my $expected = report-data-path(:$lib).slurp;
report-data-path(:$lib).unlink;
Data.plus($data1, $data2).write(:$lib);
is report-data-path(:$lib).slurp, $expected, 'report data plus works';
is Data.plus($data1, Nil), $data1, 'data plus nil';
is Data.plus(Nil, $data1), $data1, 'nil plu data';
});
done-testing