GCC Code Coverage Report


Directory: libs/url/
File: libs/url/src/rfc/authority_rule.cpp
Date: 2024-07-10 02:48:28
Exec Total Coverage
Lines: 26 28 92.9%
Functions: 1 1 100.0%
Branches: 11 14 78.6%

Line Branch Exec Source
1 //
2 // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/boostorg/url
8 //
9
10
11 #include <boost/url/detail/config.hpp>
12 #include <boost/url/rfc/authority_rule.hpp>
13 #include <boost/url/grammar/delim_rule.hpp>
14 #include <boost/url/grammar/optional_rule.hpp>
15 #include <boost/url/grammar/parse.hpp>
16 #include <boost/url/grammar/tuple_rule.hpp>
17 #include "detail/host_rule.hpp"
18 #include "detail/port_rule.hpp"
19 #include "detail/userinfo_rule.hpp"
20
21 namespace boost {
22 namespace urls {
23
24 auto
25 1901 authority_rule_t::
26 parse(
27 char const*& it,
28 char const* const end
29 ) const noexcept ->
30 system::result<value_type>
31 {
32 1901 detail::url_impl u(detail::url_impl::from::authority);
33 1901 u.cs_ = it;
34
35 // [ userinfo "@" ]
36 {
37 auto rv = grammar::parse(
38 it, end,
39 1901 grammar::optional_rule(
40 1901 grammar::tuple_rule(
41 detail::userinfo_rule,
42 1901 grammar::squelch(
43 3802 grammar::delim_rule('@')))));
44
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1901 times.
1901 if(! rv)
45 return rv.error();
46
2/2
✓ Branch 2 taken 381 times.
✓ Branch 3 taken 1520 times.
1901 if(rv->has_value())
47 {
48 129 u.apply_userinfo(
49 381 (*rv)->user,
50
2/2
✓ Branch 2 taken 252 times.
✓ Branch 3 taken 129 times.
381 (*rv)->has_password
51 252 ? &(*rv)->password
52 : nullptr);
53 }
54
1/2
✓ Branch 1 taken 1901 times.
✗ Branch 2 not taken.
1901 }
55
56 // host
57 {
58 1901 auto rv = grammar::parse(
59 it, end, detail::host_rule);
60
2/2
✓ Branch 1 taken 31 times.
✓ Branch 2 taken 1870 times.
1901 if(! rv)
61 31 return rv.error();
62 1870 u.apply_host(rv->host_type,
63 1870 rv->match, rv->addr);
64 }
65
66 // [ ":" port ]
67 {
68 1870 auto rv = grammar::parse(
69 it, end, detail::port_part_rule);
70
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 1870 times.
1870 if(! rv)
71 return rv.error();
72
2/2
✓ Branch 1 taken 260 times.
✓ Branch 2 taken 1610 times.
1870 if(rv->has_port)
73 260 u.apply_port(
74 260 rv->port,
75 260 rv->port_number);
76 }
77
78 1870 return u.construct_authority();
79 }
80
81 } // urls
82 } // boost
83
84