File Coverage

t/svapi/io.cc
Criterion Covered Total %
statement 85 85 100.0
branch 422 818 51.5
condition n/a
subroutine n/a
pod n/a
total 507 903 56.1


line stmt bran cond sub pod time code
1             #include "test.h"
2              
3             using Test = TestSv;
4              
5 117           TEST_CASE("Io", "[Sv]") {
6 166 50         perlvars vars;
7 166 50         Io my(vars.io);
8 166           Sv oth_valid(vars.io), oth_invalid(vars.hv);
9              
10 118 50         SECTION("ctor") {
    50          
    50          
    50          
    100          
11 36 50         SECTION("empty") {
    50          
    50          
    50          
    100          
12 2           Io o;
13 1 50         REQUIRE(!o);
    50          
    50          
    50          
    0          
    0          
14             }
15 59 50         SECTION("SV") {
    50          
    50          
    50          
    100          
16 24 50         SECTION("undef") { Test::ctor(vars.undef, behaviour_t::EMPTY); }
    50          
    50          
    50          
    100          
    50          
17 24 50         SECTION("number") { Test::ctor(vars.iv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
18 24 50         SECTION("string") { Test::ctor(vars.pv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
19 24 50         SECTION("RV") { Test::ctor(vars.rv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
20 24 50         SECTION("AV") { Test::ctor((SV*)vars.av, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
21 24 50         SECTION("HV") { Test::ctor((SV*)vars.hv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
22 24 50         SECTION("OHV") { Test::ctor((SV*)vars.ohv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
23 24 50         SECTION("SHV") { Test::ctor((SV*)vars.stash, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
24 24 50         SECTION("CV") { Test::ctor((SV*)vars.cv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
25 24 50         SECTION("GV") { Test::ctor((SV*)vars.iog, behaviour_t::VALID, vars.io); }
    50          
    50          
    50          
    100          
    50          
26 24 50         SECTION("R-GV") { Test::ctor((SV*)vars.iogr, behaviour_t::VALID, vars.io); }
    50          
    50          
    50          
    100          
    50          
27 24 50         SECTION("IO") { Test::ctor((SV*)vars.io, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
28             }
29 35 50         SECTION("GV") { Test::ctor(vars.iog, behaviour_t::VALID, vars.io); }
    50          
    50          
    50          
    100          
    50          
30 35 50         SECTION("IO") { Test::ctor(vars.io, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
31              
32 35 50         SECTION("Io") { Test::ctor(my, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
33 35 50         SECTION("valid Sv") { Test::ctor(oth_valid, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
34 35 50         SECTION("invalid Sv") { Test::ctor(oth_invalid, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
35             }
36              
37 125 50         SECTION("operator=") {
    50          
    50          
    50          
    100          
38 84 50         Io o(eval_pv("*STDIN{IO}", 1));
    50          
39 66 50         SECTION("SV") {
    50          
    50          
    50          
    100          
40 24 50         SECTION("undef SV") { Test::assign(o, vars.undef, behaviour_t::EMPTY); }
    50          
    50          
    50          
    100          
    50          
41 24 50         SECTION("number SV") { Test::assign(o, vars.iv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
42 24 50         SECTION("string SV") { Test::assign(o, vars.pv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
43 24 50         SECTION("RV") { Test::assign(o, vars.rv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
44 24 50         SECTION("AV") { Test::assign(o, (SV*)vars.av, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
45 24 50         SECTION("HV") { Test::assign(o, (SV*)vars.hv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
46 24 50         SECTION("OHV") { Test::assign(o, (SV*)vars.ohv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
47 24 50         SECTION("SHV") { Test::assign(o, (SV*)vars.stash, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
48 24 50         SECTION("CV") { Test::assign(o, (SV*)vars.cv, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
49 24 50         SECTION("GV") { Test::assign(o, (SV*)vars.iog, behaviour_t::VALID, vars.io); }
    50          
    50          
    50          
    100          
    50          
50 24 50         SECTION("R-GV") { Test::assign(o, (SV*)vars.iogr, behaviour_t::VALID, vars.io); }
    50          
    50          
    50          
    100          
    50          
51 24 50         SECTION("IO") { Test::assign(o, (SV*)vars.io, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
52             }
53 42 50         SECTION("GV") { Test::assign(o, vars.iog, behaviour_t::VALID, vars.io); }
    50          
    50          
    50          
    100          
    50          
54 42 50         SECTION("R-GV") { Test::assign(o, vars.iogr, behaviour_t::VALID, vars.io); }
    50          
    50          
    50          
    100          
    50          
55 42 50         SECTION("IO") { Test::assign(o, vars.io, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
56 42 50         SECTION("Glob") { Test::assign(o, my, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
57 42 50         SECTION("valid Sv") { Test::assign(o, oth_valid, behaviour_t::VALID); }
    50          
    50          
    50          
    100          
    50          
58 42 50         SECTION("invalid Sv") { Test::assign(o, oth_invalid, behaviour_t::THROWS); }
    50          
    50          
    50          
    100          
    50          
59             }
60              
61 84 50         SECTION("set") {
    50          
    50          
    50          
    100          
62 2           Io o;
63 1           auto cnt = SvREFCNT(vars.iv);
64 1 50         o.set(vars.iv); // no checks
65 1 50         REQUIRE(o);
    50          
    50          
    50          
    0          
    0          
66 1 50         REQUIRE(SvREFCNT(vars.iv) == cnt+1);
    50          
    50          
    50          
    50          
    0          
    0          
67 1 50         REQUIRE(o.get() == vars.iv);
    50          
    50          
    50          
    50          
    0          
    0          
68             }
69              
70 85 50         SECTION("cast") {
    50          
    50          
    50          
    100          
71 4 50         Io o(vars.iogr);
72 2           auto rcnt = SvREFCNT(vars.io);
73 3 50         SECTION("to SV") {
    50          
    50          
    50          
    100          
74 1           SV* sv = o;
75 1 50         REQUIRE(sv == (SV*)vars.io);
    50          
    50          
    50          
    50          
    0          
    0          
76 1 50         REQUIRE(SvREFCNT(vars.io) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
77             }
78 3 50         SECTION("to IO") {
    50          
    50          
    50          
    100          
79 1           IO* sv = o;
80 1 50         REQUIRE(sv == vars.io);
    50          
    50          
    50          
    50          
    0          
    0          
81 1 50         REQUIRE(SvREFCNT(vars.io) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
82             }
83             }
84              
85 84 50         SECTION("get") {
    50          
    50          
    50          
    100          
86 2 50         Io o(vars.iog);
87 1           auto rcnt = SvREFCNT(vars.io);
88 1 50         REQUIRE(o.get<>() == (SV*)vars.io);
    50          
    50          
    50          
    50          
    0          
    0          
89 1 50         REQUIRE(o.get() == (SV*)vars.io);
    50          
    50          
    50          
    50          
    0          
    0          
90 1 50         REQUIRE(o.get() == vars.io);
    50          
    50          
    50          
    50          
    0          
    0          
91 1 50         REQUIRE(SvREFCNT(vars.io) == rcnt);
    50          
    50          
    50          
    50          
    0          
    0          
92             }
93              
94 84 50         SECTION("fileno") {
    50          
    50          
    50          
    100          
95 2 50         Io o(eval_pv("*STDIN{IO}", 1));
    50          
96 1 50         CHECK(o.fileno() == 0);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
97 1 50         o = eval_pv("*STDOUT{IO}", 1);
    50          
98 1 50         CHECK(o.fileno() == 1);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
99 1 50         o = eval_pv("*STDERR{IO}", 1);
    50          
100 1 50         CHECK(o.fileno() == 2);
    50          
    50          
    50          
    50          
    50          
    0          
    0          
101             }
102              
103 84 50         SECTION("iotype") {
    50          
    50          
    50          
    100          
104 2 50         Io o(eval_pv("*STDIN{IO}", 1));
    50          
105 1 50         CHECK(o.iotype() == IoTYPE_RDONLY);
    50          
    50          
    50          
    50          
    0          
    0          
106 1 50         o = eval_pv("*STDOUT{IO}", 1);
    50          
107 1 50         CHECK(o.iotype() == IoTYPE_WRONLY);
    50          
    50          
    50          
    50          
    0          
    0          
108             }
109 219 50         }
    50