File Coverage

blib/lib/Test2/Tools/HTTP/Apps.pm
Criterion Covered Total %
statement 42 42 100.0
branch 8 10 80.0
condition 4 5 80.0
subroutine 11 11 100.0
pod 7 7 100.0
total 72 75 96.0


line stmt bran cond sub pod time code
1             package Test2::Tools::HTTP::Apps;
2              
3 10     10   244976 use strict;
  10         18  
  10         399  
4 10     10   48 use warnings;
  10         21  
  10         495  
5 10     10   194 use 5.014;
  10         34  
6 10     10   1164 use URI;
  10         12501  
  10         6720  
7              
8             # ABSTRACT: App container class for Test2::Tools::HTTP
9             our $VERSION = '0.12'; # VERSION
10              
11              
12             {
13             my $self;
14             sub new
15             {
16 106   100 106 1 396209 $self ||= bless {
17             psgi => {},
18             base_url => undef,
19             }, __PACKAGE__;
20             }
21             }
22              
23              
24             sub uri_key
25             {
26 156     156 1 395 my(undef, $uri) = @_;
27 156 100       575 $uri = URI->new($uri) unless ref $uri;
28 156         34364 join ':', map { $uri->$_ } qw( scheme host port );
  468         9748  
29             }
30              
31              
32             sub add_psgi
33             {
34 22     22 1 71 my($self, $uri, $app) = @_;
35 22         66 my $key = $self->uri_key($uri);
36 22         996 $self->{psgi}->{$key} = {
37             app => $app,
38             };
39             }
40              
41              
42             sub del_psgi
43             {
44 13     13 1 36 my($self, $uri) = @_;
45 13         64 my $key = $self->uri_key($uri);
46 13         536 delete $self->{psgi}->{$key};
47             }
48              
49              
50             sub base_url
51             {
52 179     179 1 439 my($self, $new) = @_;
53              
54 179 100       545 if($new)
55             {
56 3 50       30 $self->{base_url} = ref $new ? $new : URI->new($new);
57             }
58              
59 179 100       2004 unless(defined $self->{base_url})
60             {
61 6         51 $self->{base_url} = URI->new('http://localhost/');
62 6         31782 require IO::Socket::INET;
63 6         96520 $self->{base_url}->port(IO::Socket::INET->new(Listen => 5, LocalAddr => "127.0.0.1")->sockport);
64             }
65              
66 179         6705 $self->{base_url};
67             }
68              
69              
70             sub uri_to_app
71             {
72 84     84 1 943 my($self, $uri) = @_;
73 84         241 my $url = URI->new_abs($uri, $self->base_url);
74 84         13565 my $key = $self->uri_key($url);
75 84         3285 $self->{psgi}->{$key}->{app};
76             }
77              
78              
79             sub uri_to_tester
80             {
81 37     37 1 388 my($self, $uri) = @_;
82 37         105 my $url = URI->new_abs($uri, $self->base_url);
83 37         4962 my $key = $self->uri_key($url);
84 37         1198 my $app = $self->{psgi}->{$key}->{app};
85 37 50       195 return unless $app;
86              
87 37   66     355 $self->{psgi}->{$key}->{tester} ||= do {
88 20         3004 require Plack::Test;
89 20         3827 Plack::Test->create($app);
90             };
91             }
92              
93             1;
94              
95             __END__