Hello community,

here is the log from the commit of package perl-Mojolicious for 
openSUSE:Factory checked in at 2015-11-08 11:26:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Mojolicious (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Mojolicious.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Mojolicious"

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Mojolicious/perl-Mojolicious.changes        
2015-10-30 13:43:41.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.perl-Mojolicious.new/perl-Mojolicious.changes   
2015-11-08 11:26:12.000000000 +0100
@@ -1,0 +2,22 @@
+Tue Nov  3 10:12:15 UTC 2015 - co...@suse.com
+
+- updated to 6.28
+   see /usr/share/doc/packages/perl-Mojolicious/Changes
+
+  6.28  2015-11-02
+    - Improved build_app method in Mojo::Server to work more like the load_app
+      method.
+    - Fixed multi-line attribute bug in Mojo::DOM::HTML. (jamadam)
+
+-------------------------------------------------------------------
+Sat Oct 31 10:51:02 UTC 2015 - co...@suse.com
+
+- updated to 6.27
+   see /usr/share/doc/packages/perl-Mojolicious/Changes
+
+  6.27  2015-10-29
+    - Updated HTML5 entities in Mojo::Util.
+    - Improved Mojo::Server::Prefork to log if the process id file could not be
+      created.
+
+-------------------------------------------------------------------

Old:
----
  Mojolicious-6.26.tar.gz

New:
----
  Mojolicious-6.28.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Mojolicious.spec ++++++
--- /var/tmp/diff_new_pack.AaVtHq/_old  2015-11-08 11:26:13.000000000 +0100
+++ /var/tmp/diff_new_pack.AaVtHq/_new  2015-11-08 11:26:13.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           perl-Mojolicious
-Version:        6.26
+Version:        6.28
 Release:        0
 %define cpan_name Mojolicious
 Summary:        Real-time web framework

++++++ Mojolicious-6.26.tar.gz -> Mojolicious-6.28.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/Changes new/Mojolicious-6.28/Changes
--- old/Mojolicious-6.26/Changes        2015-10-28 01:24:01.000000000 +0100
+++ new/Mojolicious-6.28/Changes        2015-11-02 13:10:32.000000000 +0100
@@ -1,4 +1,14 @@
 
+6.28  2015-11-02
+  - Improved build_app method in Mojo::Server to work more like the load_app
+    method.
+  - Fixed multi-line attribute bug in Mojo::DOM::HTML. (jamadam)
+
+6.27  2015-10-29
+  - Updated HTML5 entities in Mojo::Util.
+  - Improved Mojo::Server::Prefork to log if the process id file could not be
+    created.
+
 6.26  2015-10-28
   - Renamed built-in templates with more descriptive names.
   - Added warmup method to Mojolicious::Renderer and Mojolicious::Static.
@@ -1446,9 +1456,9 @@
   - Added direct array access for parsed parameters to Mojo::Parameters.
   - Added direct array access for path parts to Mojo::Path.
   - Improved dumper helper to sort hash keys.
-  - Fixed bug in Mojo::Headers that prevented multiline headers from being
+  - Fixed bug in Mojo::Headers that prevented multi-line headers from being
     parsed correctly.
-  - Fixed multiline header support in hash representation of Mojo::Headers.
+  - Fixed multi-line header support in hash representation of Mojo::Headers.
   - Fixed cloning bug in Mojo::Headers.
 
 3.89  2013-03-04
@@ -3388,7 +3398,7 @@
   - Improved nested exception handling. (spleenjack)
   - Fixed relative path handling.
   - Fixed application generator. (yko)
-  - Fixed support for multiline expressions in Mojo::Template.
+  - Fixed support for multi-line expressions in Mojo::Template.
   - Fixed multiple --reload related leaks and reduced overall memory usage.
   - Fixed exception handling for included templates.
   - Fixed a small Mojo::Server::PSGI header bug.
@@ -3618,7 +3628,7 @@
   - Fixed Mojo::DOM to support escaped selectors.
   - Fixed Mojo::DOM parser bugs.
   - Fixed Mojo::DOM child listing bug. (evt)
-  - Fixed Mojo::DOM multiline attribute bug. (tempire)
+  - Fixed Mojo::DOM multi-line attribute bug. (tempire)
   - Fixed charset detection of the dom builder in Mojo::Message. (und3f)
   - Fixed json/data rendering with layouts in MojoX::Renderer.
   - Fixed Mojo::IOLoop to not stop unexpectedly.
@@ -4218,7 +4228,7 @@
 
 0.991234  2009-07-03
   - Added name and value filters to Mojo::Headers. (acajou)
-  - Added clean multiline value handling to Mojo::Headers.
+  - Added clean multi-line value handling to Mojo::Headers.
   - Added prepare/finalize methods to Mojolicious.
   - Added some additional MIME types to MojoX::Types.
   - Renamed method add_line to add in Mojo::Headers.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/META.json 
new/Mojolicious-6.28/META.json
--- old/Mojolicious-6.26/META.json      2015-10-29 01:27:55.000000000 +0100
+++ new/Mojolicious-6.28/META.json      2015-11-02 16:16:03.000000000 +0100
@@ -58,5 +58,5 @@
       },
       "x_IRC" : "irc://irc.perl.org/#mojo"
    },
-   "version" : "6.26"
+   "version" : "6.28"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/META.yml 
new/Mojolicious-6.28/META.yml
--- old/Mojolicious-6.26/META.yml       2015-10-29 01:27:55.000000000 +0100
+++ new/Mojolicious-6.28/META.yml       2015-11-02 16:16:03.000000000 +0100
@@ -31,4 +31,4 @@
   homepage: http://mojolicio.us
   license: http://www.opensource.org/licenses/artistic-license-2.0
   repository: https://github.com/kraih/mojo.git
-version: '6.26'
+version: '6.28'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Content.pm 
new/Mojolicious-6.28/lib/Mojo/Content.pm
--- old/Mojolicious-6.26/lib/Mojo/Content.pm    2015-10-08 20:45:17.000000000 
+0200
+++ new/Mojolicious-6.28/lib/Mojo/Content.pm    2015-11-02 13:08:18.000000000 
+0100
@@ -342,8 +342,7 @@
 
 Emitted when a new chunk of content arrives.
 
-  $content->unsubscribe('read');
-  $content->on(read => sub {
+  $content->unsubscribe('read')->on(read => sub {
     my ($content, $bytes) = @_;
     say "Streaming: $bytes";
   });
@@ -577,11 +576,11 @@
   $content = $content->write_chunk($bytes);
   $content = $content->write_chunk($bytes => sub {...});
 
-Write dynamic content non-blocking with C<chunked> transfer encoding, the
-optional drain callback will be invoked once all data has been written. Calling
-this method without a chunk of data will finalize the L</"headers"> and allow
-for dynamic content to be written later. You can write an empty chunk of data
-at any time to end the stream.
+Write dynamic content non-blocking with chunked transfer encoding, the optional
+drain callback will be invoked once all data has been written. Calling this
+method without a chunk of data will finalize the L</"headers"> and allow for
+dynamic content to be written later. You can write an empty chunk of data at 
any
+time to end the stream.
 
   # Make sure previous chunk of data has been written before continuing
   $content->write_chunk('He' => sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/DOM/HTML.pm 
new/Mojolicious-6.28/lib/Mojo/DOM/HTML.pm
--- old/Mojolicious-6.26/lib/Mojo/DOM/HTML.pm   2015-10-26 21:49:30.000000000 
+0100
+++ new/Mojolicious-6.28/lib/Mojo/DOM/HTML.pm   2015-10-30 05:25:59.000000000 
+0100
@@ -8,10 +8,10 @@
 has 'xml';
 
 my $ATTR_RE = qr/
-  ([^<>=\s\/]+|\/)                    # Key
+  ([^<>=\s\/]+|\/)                     # Key
   (?:
     \s*=\s*
-    (?:(["'])(.*?)\g{-2}|([^>\s]*))   # Value
+    (?s:(["'])(.*?)\g{-2}|([^>\s]*))   # Value
   )?
   \s*
 /x;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/DOM.pm 
new/Mojolicious-6.28/lib/Mojo/DOM.pm
--- old/Mojolicious-6.26/lib/Mojo/DOM.pm        2015-10-24 15:16:44.000000000 
+0200
+++ new/Mojolicious-6.28/lib/Mojo/DOM.pm        2015-11-01 04:32:19.000000000 
+0100
@@ -282,8 +282,8 @@
 sub _parse { Mojo::DOM::HTML->new(xml => shift->xml)->parse(shift)->tree }
 
 sub _replace {
-  my ($self, $parent, $tree, @nodes) = @_;
-  splice @$parent, _offset($parent, $tree), 1, _link($parent, @nodes);
+  my ($self, $parent, $child, @nodes) = @_;
+  splice @$parent, _offset($parent, $child), 1, _link($parent, @nodes);
   return $self->parent;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Headers.pm 
new/Mojolicious-6.28/lib/Mojo/Headers.pm
--- old/Mojolicious-6.26/lib/Mojo/Headers.pm    2015-10-08 18:54:16.000000000 
+0200
+++ new/Mojolicious-6.28/lib/Mojo/Headers.pm    2015-10-30 05:27:05.000000000 
+0100
@@ -101,7 +101,7 @@
     # New header
     if ($line =~ /^(\S[^:]*)\s*:\s*(.*)$/) { push @$headers, [$1, $2] }
 
-    # Multiline
+    # Multi-line
     elsif ($line =~ s/^\s+// && @$headers) { $headers->[-1][1] .= " $line" }
 
     # Empty line
@@ -135,7 +135,7 @@
 sub to_string {
   my $self = shift;
 
-  # Make sure multiline values are formatted correctly
+  # Make sure multi-line values are formatted correctly
   my @headers;
   for my $name (@{$self->names}) {
     push @headers, "$name: $_" for @{$self->{headers}{lc $name}};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Log.pm 
new/Mojolicious-6.28/lib/Mojo/Log.pm
--- old/Mojolicious-6.26/lib/Mojo/Log.pm        2015-08-29 13:14:11.000000000 
+0200
+++ new/Mojolicious-6.28/lib/Mojo/Log.pm        2015-11-02 13:08:37.000000000 
+0100
@@ -114,8 +114,7 @@
 
 Emitted when a new message gets logged.
 
-  $log->unsubscribe('message');
-  $log->on(message => sub {
+  $log->unsubscribe('message')->on(message => sub {
     my ($log, $level, @lines) = @_;
     say "$level: ", @lines;
   });
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Server/CGI.pm 
new/Mojolicious-6.28/lib/Mojo/Server/CGI.pm
--- old/Mojolicious-6.26/lib/Mojo/Server/CGI.pm 2015-08-29 13:14:14.000000000 
+0200
+++ new/Mojolicious-6.28/lib/Mojo/Server/CGI.pm 2015-11-02 13:09:06.000000000 
+0100
@@ -77,8 +77,7 @@
   use Mojo::Server::CGI;
 
   my $cgi = Mojo::Server::CGI->new;
-  $cgi->unsubscribe('request');
-  $cgi->on(request => sub {
+  $cgi->unsubscribe('request')->on(request => sub {
     my ($cgi, $tx) = @_;
 
     # Request
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Server/Daemon.pm 
new/Mojolicious-6.28/lib/Mojo/Server/Daemon.pm
--- old/Mojolicious-6.26/lib/Mojo/Server/Daemon.pm      2015-10-27 
16:50:24.000000000 +0100
+++ new/Mojolicious-6.28/lib/Mojo/Server/Daemon.pm      2015-11-02 
13:09:11.000000000 +0100
@@ -255,8 +255,7 @@
   use Mojo::Server::Daemon;
 
   my $daemon = Mojo::Server::Daemon->new(listen => ['http://*:8080']);
-  $daemon->unsubscribe('request');
-  $daemon->on(request => sub {
+  $daemon->unsubscribe('request')->on(request => sub {
     my ($daemon, $tx) = @_;
 
     # Request
@@ -311,7 +310,10 @@
   my $acceptors = $daemon->acceptors;
   $daemon       = $daemon->acceptors([]);
 
-Active acceptors.
+Active acceptor ids.
+
+  # Check port
+  mu $port = $daemon->ioloop->acceptor($daemon->acceptors->[0])->port;
 
 =head2 backlog
 
@@ -466,6 +468,11 @@
   my $id   = $daemon->listen(['http://127.0.0.1'])->start->acceptors->[0];
   my $port = $daemon->ioloop->acceptor($id)->port;
 
+  # Run multiple web servers concurrently
+  my $daemon1 = Mojo::Server::Daemon->new(listen => ['http://*:3000'])->start;
+  my $daemon2 = Mojo::Server::Daemon->new(listen => ['http://*:4000'])->start;
+  Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
+
 =head2 stop
 
   $daemon = $daemon->stop;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Server/Hypnotoad.pm 
new/Mojolicious-6.28/lib/Mojo/Server/Hypnotoad.pm
--- old/Mojolicious-6.26/lib/Mojo/Server/Hypnotoad.pm   2015-08-29 
13:17:09.000000000 +0200
+++ new/Mojolicious-6.28/lib/Mojo/Server/Hypnotoad.pm   2015-10-30 
17:02:48.000000000 +0100
@@ -10,7 +10,7 @@
 use Mojo::Util qw(steady_time);
 use Scalar::Util 'weaken';
 
-has prefork => sub { Mojo::Server::Prefork->new };
+has prefork => sub { Mojo::Server::Prefork->new(listen => ['http://*:8080']) };
 has upgrade_timeout => 60;
 
 sub configure {
@@ -19,7 +19,6 @@
   # Hypnotoad settings
   my $prefork = $self->prefork;
   my $c = $prefork->app->config($name) || {};
-  $c->{listen} ||= ['http://*:8080'];
   $self->upgrade_timeout($c->{upgrade_timeout}) if $c->{upgrade_timeout};
 
   # Prefork settings
@@ -384,7 +383,7 @@
 
   $hypnotoad->run('script/my_app');
 
-Run server for application.
+Run server for application and wait for L</"MANAGER SIGNALS">.
 
 =head1 SEE ALSO
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Server/Morbo.pm 
new/Mojolicious-6.28/lib/Mojo/Server/Morbo.pm
--- old/Mojolicious-6.26/lib/Mojo/Server/Morbo.pm       2015-08-29 
13:14:15.000000000 +0200
+++ new/Mojolicious-6.28/lib/Mojo/Server/Morbo.pm       2015-10-30 
17:02:17.000000000 +0100
@@ -173,7 +173,7 @@
 
   $morbo->run('script/my_app');
 
-Run server for application.
+Run server for application and wait for L</"SIGNALS">.
 
 =head1 SEE ALSO
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Server/PSGI.pm 
new/Mojolicious-6.28/lib/Mojo/Server/PSGI.pm
--- old/Mojolicious-6.26/lib/Mojo/Server/PSGI.pm        2015-08-29 
16:31:58.000000000 +0200
+++ new/Mojolicious-6.28/lib/Mojo/Server/PSGI.pm        2015-11-02 
13:09:36.000000000 +0100
@@ -76,8 +76,7 @@
   use Mojo::Server::PSGI;
 
   my $psgi = Mojo::Server::PSGI->new;
-  $psgi->unsubscribe('request');
-  $psgi->on(request => sub {
+  $psgi->unsubscribe('request')->on(request => sub {
     my ($psgi, $tx) = @_;
 
     # Request
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Server/Prefork.pm 
new/Mojolicious-6.28/lib/Mojo/Server/Prefork.pm
--- old/Mojolicious-6.26/lib/Mojo/Server/Prefork.pm     2015-10-27 
16:53:22.000000000 +0100
+++ new/Mojolicious-6.28/lib/Mojo/Server/Prefork.pm     2015-11-02 
13:09:26.000000000 +0100
@@ -45,9 +45,10 @@
   return if -e (my $file = $self->pid_file);
 
   # Create PID file
-  $self->app->log->info(qq{Creating process id file "$file"});
-  die qq{Can't create process id file "$file": $!}
+  $self->app->log->error(qq{Can't create process id file "$file": $!})
+    and die qq{Can't create process id file "$file": $!}
     unless open my $handle, '>', $file;
+  $self->app->log->info(qq{Creating process id file "$file"});
   chmod 0644, $handle;
   print $handle $$;
 }
@@ -210,8 +211,7 @@
   use Mojo::Server::Prefork;
 
   my $prefork = Mojo::Server::Prefork->new(listen => ['http://*:8080']);
-  $prefork->unsubscribe('request');
-  $prefork->on(request => sub {
+  $prefork->unsubscribe('request')->on(request => sub {
     my ($prefork, $tx) = @_;
 
     # Request
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Server.pm 
new/Mojolicious-6.28/lib/Mojo/Server.pm
--- old/Mojolicious-6.26/lib/Mojo/Server.pm     2015-08-29 13:17:09.000000000 
+0200
+++ new/Mojolicious-6.28/lib/Mojo/Server.pm     2015-11-02 13:08:49.000000000 
+0100
@@ -14,7 +14,7 @@
 sub build_app {
   my ($self, $app) = @_;
   local $ENV{MOJO_EXE};
-  return $app->new unless my $e = load_class $app;
+  return $self->app($app->new)->app unless my $e = load_class $app;
   die ref $e ? $e : qq{Can't find application class "$app" in \@INC. (@INC)\n};
 }
 
@@ -115,8 +115,7 @@
 
 Emitted when a request is ready and needs to be handled.
 
-  $server->unsubscribe('request');
-  $server->on(request => sub {
+  $server->unsubscribe('request')->on(request => sub {
     my ($server, $tx) = @_;
     $tx->res->code(200);
     $tx->res->headers->content_type('text/plain');
@@ -152,7 +151,7 @@
 
   my $app = $server->build_app('MyApp');
 
-Build application from class.
+Build application from class and assign it to L</"app">.
 
 =head2 build_tx
 
@@ -170,7 +169,7 @@
 
   my $app = $server->load_app('/home/sri/myapp.pl');
 
-Load application from script.
+Load application from script and assign it to L</"app">.
 
   say Mojo::Server->new->load_app('./myapp.pl')->home;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Template.pm 
new/Mojolicious-6.28/lib/Mojo/Template.pm
--- old/Mojolicious-6.26/lib/Mojo/Template.pm   2015-10-28 01:07:25.000000000 
+0100
+++ new/Mojolicious-6.28/lib/Mojo/Template.pm   2015-10-30 05:27:18.000000000 
+0100
@@ -43,7 +43,7 @@
       $blocks[-1] .= "\$_O .= \"" . $value . "\";" if $value ne '';
     }
 
-    # Code or multiline expression
+    # Code or multi-line expression
     elsif ($op eq 'code' || $multi) { $blocks[-1] .= $value }
 
     # Capture end
@@ -65,7 +65,7 @@
       # Raw
       elsif (!$multi) { $blocks[-1] .= "\$_O .= scalar + $value" }
 
-      # Multiline
+      # Multi-line
       $multi = !$next || $next->[0] ne 'text';
 
       # Append semicolon
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Transaction/WebSocket.pm 
new/Mojolicious-6.28/lib/Mojo/Transaction/WebSocket.pm
--- old/Mojolicious-6.26/lib/Mojo/Transaction/WebSocket.pm      2015-10-06 
11:40:40.000000000 +0200
+++ new/Mojolicious-6.28/lib/Mojo/Transaction/WebSocket.pm      2015-11-02 
13:09:48.000000000 +0100
@@ -404,8 +404,7 @@
 
 Emitted when a WebSocket frame has been received.
 
-  $ws->unsubscribe('frame');
-  $ws->on(frame => sub {
+  $ws->unsubscribe('frame')->on(frame => sub {
     my ($ws, $frame) = @_;
     say "FIN: $frame->[0]";
     say "RSV1: $frame->[1]";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojo/Util.pm 
new/Mojolicious-6.28/lib/Mojo/Util.pm
--- old/Mojolicious-6.26/lib/Mojo/Util.pm       2015-10-26 17:14:42.000000000 
+0100
+++ new/Mojolicious-6.28/lib/Mojo/Util.pm       2015-10-30 05:27:26.000000000 
+0100
@@ -114,7 +114,7 @@
 
 sub html_unescape {
   my $str = shift;
-  $str =~ s/&(?:\#((?:\d{1,7}|x[0-9a-fA-F]{1,6}));|(\w+;?))/_decode($1, $2)/ge;
+  $str =~ s/&(?:\#((?:\d{1,7}|x[0-9a-fA-F]{1,6}));|(\w+;))/_decode($1, $2)/ge;
   return $str;
 }
 
@@ -365,13 +365,8 @@
   # Code point
   return chr($point !~ /^x/ ? $point : hex $point) unless defined $name;
 
-  # Find entity name
-  my $rest = '';
-  while ($name ne '') {
-    return "$ENTITIES{$name}$rest" if exists $ENTITIES{$name};
-    $rest = chop($name) . $rest;
-  }
-  return "&$rest";
+  # Named character reference
+  return exists $ENTITIES{$name} ? $ENTITIES{$name} : "&$name";
 }
 
 sub _encoding {
@@ -757,7 +752,7 @@
 
   my $unindented = unindent $str;
 
-Unindent multiline string.
+Unindent multi-line string.
 
   # "foo\nbar\nbaz\n"
   unindent "  foo\n  bar\n  baz\n";
@@ -819,33 +814,24 @@
 
 __DATA__
 Aacute; U+000C1
-Aacute U+000C1
 aacute; U+000E1
-aacute U+000E1
 Abreve; U+00102
 abreve; U+00103
 ac; U+0223E
 acd; U+0223F
 acE; U+0223E U+00333
 Acirc; U+000C2
-Acirc U+000C2
 acirc; U+000E2
-acirc U+000E2
 acute; U+000B4
-acute U+000B4
 Acy; U+00410
 acy; U+00430
 AElig; U+000C6
-AElig U+000C6
 aelig; U+000E6
-aelig U+000E6
 af; U+02061
 Afr; U+1D504
 afr; U+1D51E
 Agrave; U+000C0
-Agrave U+000C0
 agrave; U+000E0
-agrave U+000E0
 alefsym; U+02135
 aleph; U+02135
 Alpha; U+00391
@@ -854,9 +840,7 @@
 amacr; U+00101
 amalg; U+02A3F
 AMP; U+00026
-AMP U+00026
 amp; U+00026
-amp U+00026
 And; U+02A53
 and; U+02227
 andand; U+02A55
@@ -895,9 +879,7 @@
 approx; U+02248
 approxeq; U+0224A
 Aring; U+000C5
-Aring U+000C5
 aring; U+000E5
-aring U+000E5
 Ascr; U+1D49C
 ascr; U+1D4B6
 Assign; U+02254
@@ -905,13 +887,9 @@
 asymp; U+02248
 asympeq; U+0224D
 Atilde; U+000C3
-Atilde U+000C3
 atilde; U+000E3
-atilde U+000E3
 Auml; U+000C4
-Auml U+000C4
 auml; U+000E4
-auml U+000E4
 awconint; U+02233
 awint; U+02A11
 backcong; U+0224C
@@ -1026,7 +1004,6 @@
 Breve; U+002D8
 breve; U+002D8
 brvbar; U+000A6
-brvbar U+000A6
 Bscr; U+0212C
 bscr; U+1D4B7
 bsemi; U+0204F
@@ -1060,9 +1037,7 @@
 Ccaron; U+0010C
 ccaron; U+0010D
 Ccedil; U+000C7
-Ccedil U+000C7
 ccedil; U+000E7
-ccedil U+000E7
 Ccirc; U+00108
 ccirc; U+00109
 Cconint; U+02230
@@ -1071,11 +1046,9 @@
 Cdot; U+0010A
 cdot; U+0010B
 cedil; U+000B8
-cedil U+000B8
 Cedilla; U+000B8
 cemptyv; U+029B2
 cent; U+000A2
-cent U+000A2
 CenterDot; U+000B7
 centerdot; U+000B7
 Cfr; U+0212D
@@ -1132,9 +1105,7 @@
 coprod; U+02210
 Coproduct; U+02210
 COPY; U+000A9
-COPY U+000A9
 copy; U+000A9
-copy U+000A9
 copysr; U+02117
 CounterClockwiseContourIntegral; U+02233
 crarr; U+021B5
@@ -1169,7 +1140,6 @@
 curlyvee; U+022CE
 curlywedge; U+022CF
 curren; U+000A4
-curren U+000A4
 curvearrowleft; U+021B6
 curvearrowright; U+021B7
 cuvee; U+022CE
@@ -1199,7 +1169,6 @@
 DDotrahd; U+02911
 ddotseq; U+02A77
 deg; U+000B0
-deg U+000B0
 Del; U+02207
 Delta; U+00394
 delta; U+003B4
@@ -1226,7 +1195,6 @@
 disin; U+022F2
 div; U+000F7
 divide; U+000F7
-divide U+000F7
 divideontimes; U+022C7
 divonx; U+022C7
 DJcy; U+00402
@@ -1298,17 +1266,13 @@
 dzcy; U+0045F
 dzigrarr; U+027FF
 Eacute; U+000C9
-Eacute U+000C9
 eacute; U+000E9
-eacute U+000E9
 easter; U+02A6E
 Ecaron; U+0011A
 ecaron; U+0011B
 ecir; U+02256
 Ecirc; U+000CA
-Ecirc U+000CA
 ecirc; U+000EA
-ecirc U+000EA
 ecolon; U+02255
 Ecy; U+0042D
 ecy; U+0044D
@@ -1322,9 +1286,7 @@
 efr; U+1D522
 eg; U+02A9A
 Egrave; U+000C8
-Egrave U+000C8
 egrave; U+000E8
-egrave U+000E8
 egs; U+02A96
 egsdot; U+02A98
 el; U+02A99
@@ -1380,13 +1342,9 @@
 Eta; U+00397
 eta; U+003B7
 ETH; U+000D0
-ETH U+000D0
 eth; U+000F0
-eth U+000F0
 Euml; U+000CB
-Euml U+000CB
 euml; U+000EB
-euml U+000EB
 euro; U+020AC
 excl; U+00021
 exist; U+02203
@@ -1420,17 +1378,14 @@
 Fouriertrf; U+02131
 fpartint; U+02A0D
 frac12; U+000BD
-frac12 U+000BD
 frac13; U+02153
 frac14; U+000BC
-frac14 U+000BC
 frac15; U+02155
 frac16; U+02159
 frac18; U+0215B
 frac23; U+02154
 frac25; U+02156
 frac34; U+000BE
-frac34 U+000BE
 frac35; U+02157
 frac38; U+0215C
 frac45; U+02158
@@ -1505,10 +1460,8 @@
 gsime; U+02A8E
 gsiml; U+02A90
 GT; U+0003E
-GT U+0003E
 Gt; U+0226B
 gt; U+0003E
-gt U+0003E
 gtcc; U+02AA7
 gtcir; U+02A7A
 gtdot; U+022D7
@@ -1564,28 +1517,21 @@
 hybull; U+02043
 hyphen; U+02010
 Iacute; U+000CD
-Iacute U+000CD
 iacute; U+000ED
-iacute U+000ED
 ic; U+02063
 Icirc; U+000CE
-Icirc U+000CE
 icirc; U+000EE
-icirc U+000EE
 Icy; U+00418
 icy; U+00438
 Idot; U+00130
 IEcy; U+00415
 iecy; U+00435
 iexcl; U+000A1
-iexcl U+000A1
 iff; U+021D4
 Ifr; U+02111
 ifr; U+1D526
 Igrave; U+000CC
-Igrave U+000CC
 igrave; U+000EC
-igrave U+000EC
 ii; U+02148
 iiiint; U+02A0C
 iiint; U+0222D
@@ -1630,7 +1576,6 @@
 iota; U+003B9
 iprod; U+02A3C
 iquest; U+000BF
-iquest U+000BF
 Iscr; U+02110
 iscr; U+1D4BE
 isin; U+02208
@@ -1645,9 +1590,7 @@
 Iukcy; U+00406
 iukcy; U+00456
 Iuml; U+000CF
-Iuml U+000CF
 iuml; U+000EF
-iuml U+000EF
 Jcirc; U+00134
 jcirc; U+00135
 Jcy; U+00419
@@ -1695,7 +1638,6 @@
 lap; U+02A85
 Laplacetrf; U+02112
 laquo; U+000AB
-laquo U+000AB
 Larr; U+0219E
 lArr; U+021D0
 larr; U+02190
@@ -1876,10 +1818,8 @@
 Lstrok; U+00141
 lstrok; U+00142
 LT; U+0003C
-LT U+0003C
 Lt; U+0226A
 lt; U+0003C
-lt U+0003C
 ltcc; U+02AA6
 ltcir; U+02A79
 ltdot; U+022D6
@@ -1896,7 +1836,6 @@
 lvertneqq; U+02268 U+0FE00
 lvnE; U+02268 U+0FE00
 macr; U+000AF
-macr U+000AF
 male; U+02642
 malt; U+02720
 maltese; U+02720
@@ -1919,12 +1858,10 @@
 mfr; U+1D52A
 mho; U+02127
 micro; U+000B5
-micro U+000B5
 mid; U+02223
 midast; U+0002A
 midcir; U+02AF0
 middot; U+000B7
-middot U+000B7
 minus; U+02212
 minusb; U+0229F
 minusd; U+02238
@@ -1957,7 +1894,6 @@
 natural; U+0266E
 naturals; U+02115
 nbsp; U+000A0
-nbsp U+000A0
 nbump; U+0224E U+00338
 nbumpe; U+0224F U+00338
 ncap; U+02A43
@@ -2040,7 +1976,6 @@
 nopf; U+1D55F
 Not; U+02AEC
 not; U+000AC
-not U+000AC
 NotCongruent; U+02262
 NotCupCap; U+0226D
 NotDoubleVerticalBar; U+02226
@@ -2150,9 +2085,7 @@
 nsupseteqq; U+02AC6 U+00338
 ntgl; U+02279
 Ntilde; U+000D1
-Ntilde U+000D1
 ntilde; U+000F1
-ntilde U+000F1
 ntlg; U+02278
 ntriangleleft; U+022EA
 ntrianglelefteq; U+022EC
@@ -2185,15 +2118,11 @@
 nwarrow; U+02196
 nwnear; U+02927
 Oacute; U+000D3
-Oacute U+000D3
 oacute; U+000F3
-oacute U+000F3
 oast; U+0229B
 ocir; U+0229A
 Ocirc; U+000D4
-Ocirc U+000D4
 ocirc; U+000F4
-ocirc U+000F4
 Ocy; U+0041E
 ocy; U+0043E
 odash; U+0229D
@@ -2209,9 +2138,7 @@
 ofr; U+1D52C
 ogon; U+002DB
 Ograve; U+000D2
-Ograve U+000D2
 ograve; U+000F2
-ograve U+000F2
 ogt; U+029C1
 ohbar; U+029B5
 ohm; U+003A9
@@ -2243,9 +2170,7 @@
 order; U+02134
 orderof; U+02134
 ordf; U+000AA
-ordf U+000AA
 ordm; U+000BA
-ordm U+000BA
 origof; U+022B6
 oror; U+02A56
 orslope; U+02A57
@@ -2254,21 +2179,15 @@
 Oscr; U+1D4AA
 oscr; U+02134
 Oslash; U+000D8
-Oslash U+000D8
 oslash; U+000F8
-oslash U+000F8
 osol; U+02298
 Otilde; U+000D5
-Otilde U+000D5
 otilde; U+000F5
-otilde U+000F5
 Otimes; U+02A37
 otimes; U+02297
 otimesas; U+02A36
 Ouml; U+000D6
-Ouml U+000D6
 ouml; U+000F6
-ouml U+000F6
 ovbar; U+0233D
 OverBar; U+0203E
 OverBrace; U+023DE
@@ -2276,7 +2195,6 @@
 OverParenthesis; U+023DC
 par; U+02225
 para; U+000B6
-para U+000B6
 parallel; U+02225
 parsim; U+02AF3
 parsl; U+02AFD
@@ -2312,7 +2230,6 @@
 pluse; U+02A72
 PlusMinus; U+000B1
 plusmn; U+000B1
-plusmn U+000B1
 plussim; U+02A26
 plustwo; U+02A27
 pm; U+000B1
@@ -2321,7 +2238,6 @@
 Popf; U+02119
 popf; U+1D561
 pound; U+000A3
-pound U+000A3
 Pr; U+02ABB
 pr; U+0227A
 prap; U+02AB7
@@ -2375,9 +2291,7 @@
 quest; U+0003F
 questeq; U+0225F
 QUOT; U+00022
-QUOT U+00022
 quot; U+00022
-quot U+00022
 rAarr; U+021DB
 race; U+0223D U+00331
 Racute; U+00154
@@ -2390,7 +2304,6 @@
 range; U+029A5
 rangle; U+027E9
 raquo; U+000BB
-raquo U+000BB
 Rarr; U+021A0
 rArr; U+021D2
 rarr; U+02192
@@ -2439,9 +2352,7 @@
 reals; U+0211D
 rect; U+025AD
 REG; U+000AE
-REG U+000AE
 reg; U+000AE
-reg U+000AE
 ReverseElement; U+0220B
 ReverseEquilibrium; U+021CB
 ReverseUpEquilibrium; U+0296F
@@ -2557,7 +2468,6 @@
 searr; U+02198
 searrow; U+02198
 sect; U+000A7
-sect U+000A7
 semi; U+0003B
 seswar; U+02929
 setminus; U+02216
@@ -2578,7 +2488,6 @@
 ShortRightArrow; U+02192
 ShortUpArrow; U+02191
 shy; U+000AD
-shy U+000AD
 Sigma; U+003A3
 sigma; U+003C3
 sigmaf; U+003C2
@@ -2690,11 +2599,8 @@
 Sup; U+022D1
 sup; U+02283
 sup1; U+000B9
-sup1 U+000B9
 sup2; U+000B2
-sup2 U+000B2
 sup3; U+000B3
-sup3 U+000B3
 supdot; U+02ABE
 supdsub; U+02AD8
 supE; U+02AC6
@@ -2724,7 +2630,6 @@
 swarrow; U+02199
 swnwar; U+0292A
 szlig; U+000DF
-szlig U+000DF
 Tab; U+00009
 target; U+02316
 Tau; U+003A4
@@ -2755,16 +2660,13 @@
 thkap; U+02248
 thksim; U+0223C
 THORN; U+000DE
-THORN U+000DE
 thorn; U+000FE
-thorn U+000FE
 Tilde; U+0223C
 tilde; U+002DC
 TildeEqual; U+02243
 TildeFullEqual; U+02245
 TildeTilde; U+02248
 times; U+000D7
-times U+000D7
 timesb; U+022A0
 timesbar; U+02A31
 timesd; U+02A30
@@ -2807,9 +2709,7 @@
 twoheadleftarrow; U+0219E
 twoheadrightarrow; U+021A0
 Uacute; U+000DA
-Uacute U+000DA
 uacute; U+000FA
-uacute U+000FA
 Uarr; U+0219F
 uArr; U+021D1
 uarr; U+02191
@@ -2819,9 +2719,7 @@
 Ubreve; U+0016C
 ubreve; U+0016D
 Ucirc; U+000DB
-Ucirc U+000DB
 ucirc; U+000FB
-ucirc U+000FB
 Ucy; U+00423
 ucy; U+00443
 udarr; U+021C5
@@ -2832,9 +2730,7 @@
 Ufr; U+1D518
 ufr; U+1D532
 Ugrave; U+000D9
-Ugrave U+000D9
 ugrave; U+000F9
-ugrave U+000F9
 uHar; U+02963
 uharl; U+021BF
 uharr; U+021BE
@@ -2846,7 +2742,6 @@
 Umacr; U+0016A
 umacr; U+0016B
 uml; U+000A8
-uml U+000A8
 UnderBar; U+0005F
 UnderBrace; U+023DF
 UnderBracket; U+023B5
@@ -2894,9 +2789,7 @@
 utrif; U+025B4
 uuarr; U+021C8
 Uuml; U+000DC
-Uuml U+000DC
 uuml; U+000FC
-uuml U+000FC
 uwangle; U+029A7
 vangrt; U+0299C
 varepsilon; U+003F5
@@ -3002,9 +2895,7 @@
 xvee; U+022C1
 xwedge; U+022C0
 Yacute; U+000DD
-Yacute U+000DD
 yacute; U+000FD
-yacute U+000FD
 YAcy; U+0042F
 yacy; U+0044F
 Ycirc; U+00176
@@ -3012,7 +2903,6 @@
 Ycy; U+0042B
 ycy; U+0044B
 yen; U+000A5
-yen U+000A5
 Yfr; U+1D51C
 yfr; U+1D536
 YIcy; U+00407
@@ -3025,7 +2915,6 @@
 yucy; U+0044E
 Yuml; U+00178
 yuml; U+000FF
-yuml U+000FF
 Zacute; U+00179
 zacute; U+0017A
 Zcaron; U+0017D
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojolicious/Controller.pm 
new/Mojolicious-6.28/lib/Mojolicious/Controller.pm
--- old/Mojolicious-6.26/lib/Mojolicious/Controller.pm  2015-10-20 
18:57:25.000000000 +0200
+++ new/Mojolicious-6.28/lib/Mojolicious/Controller.pm  2015-10-29 
17:27:53.000000000 +0100
@@ -995,10 +995,10 @@
   $c = $c->write_chunk(sub {...});
   $c = $c->write_chunk($bytes => sub {...});
 
-Write dynamic content non-blocking with C<chunked> transfer encoding, the
-optional drain callback will be invoked once all data has been written. Calling
-this method without a chunk of data will finalize the response headers and
-allow for dynamic content to be written later.
+Write dynamic content non-blocking with chunked transfer encoding, the optional
+drain callback will be invoked once all data has been written. Calling this
+method without a chunk of data will finalize the response headers and allow for
+dynamic content to be written later.
 
   # Make sure previous chunk has been written before continuing
   $c->write_chunk('H' => sub {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojolicious/Guides/Cookbook.pod 
new/Mojolicious-6.28/lib/Mojolicious/Guides/Cookbook.pod
--- old/Mojolicious-6.26/lib/Mojolicious/Guides/Cookbook.pod    2015-10-28 
01:05:32.000000000 +0100
+++ new/Mojolicious-6.28/lib/Mojolicious/Guides/Cookbook.pod    2015-11-01 
04:36:26.000000000 +0100
@@ -345,6 +345,8 @@
 
   use Mojolicious::Lite;
 
+  app->config(hypnotoad => {listen => ['http://*:80']});
+
   plugin Mount => {'test1.example.com' => '/home/sri/myapp1.pl'};
   plugin Mount => {'test2.example.com' => '/home/sri/myapp2.pl'};
 
@@ -1035,8 +1037,8 @@
   $tx = $ua->start($tx);
 
 The event L<Mojo::Content/"read"> will be emitted for every chunk of data that
-is received, even C<chunked> encoding and gzip compression will be handled
-transparently if necessary.
+is received, even chunked transfer encoding and gzip content encoding will be
+handled transparently if necessary.
 
 =head2 Streaming request
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Mojolicious-6.26/lib/Mojolicious/Guides/Rendering.pod 
new/Mojolicious-6.28/lib/Mojolicious/Guides/Rendering.pod
--- old/Mojolicious-6.26/lib/Mojolicious/Guides/Rendering.pod   2015-10-28 
01:05:55.000000000 +0100
+++ new/Mojolicious-6.28/lib/Mojolicious/Guides/Rendering.pod   2015-10-29 
17:28:02.000000000 +0100
@@ -1258,7 +1258,7 @@
 =head2 Chunked transfer encoding
 
 For very dynamic content you might not know the response content length in
-advance, that's where the C<chunked> transfer encoding and
+advance, that's where the chunked transfer encoding and
 L<Mojolicious::Controller/"write_chunk"> come in handy. A common use would be
 to send the C<head> section of an HTML document to the browser in advance and
 speed up preloading of referenced images and stylesheets.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/lib/Mojolicious.pm 
new/Mojolicious-6.28/lib/Mojolicious.pm
--- old/Mojolicious-6.26/lib/Mojolicious.pm     2015-10-28 01:03:42.000000000 
+0100
+++ new/Mojolicious-6.28/lib/Mojolicious.pm     2015-10-30 01:06:42.000000000 
+0100
@@ -43,7 +43,7 @@
 has validator => sub { Mojolicious::Validator->new };
 
 our $CODENAME = 'Clinking Beer Mugs';
-our $VERSION  = '6.26';
+our $VERSION  = '6.28';
 
 sub AUTOLOAD {
   my $self = shift;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/t/mojo/daemon.t 
new/Mojolicious-6.28/t/mojo/daemon.t
--- old/Mojolicious-6.26/t/mojo/daemon.t        2015-08-29 01:31:12.000000000 
+0200
+++ new/Mojolicious-6.28/t/mojo/daemon.t        2015-10-30 18:13:11.000000000 
+0100
@@ -79,10 +79,13 @@
 is_deeply $app->config, {foo => 'bar', baz => 'yada', test => 23},
   'right value';
 
-# Script name
-my $path = "$FindBin::Bin/lib/../lib/myapp.pl";
-is(Mojo::Server::Daemon->new->load_app($path)->config('script'),
-  abs_path($path), 'right script name');
+# Loading
+my $daemon = Mojo::Server::Daemon->new;
+my $path   = "$FindBin::Bin/lib/../lib/myapp.pl";
+is ref $daemon->load_app($path), 'Mojolicious::Lite', 'right reference';
+is $daemon->app->config('script'), abs_path($path), 'right script name';
+is ref $daemon->build_app('TestApp'), 'TestApp', 'right reference';
+is ref $daemon->app, 'TestApp', 'right reference';
 
 # Load broken app
 my $bin = $FindBin::Bin;
@@ -229,7 +232,7 @@
 ok $remote_port > 0, 'has remote port';
 
 # Pipelined
-my $daemon
+$daemon
   = Mojo::Server::Daemon->new({listen => ['http://127.0.0.1'], silent => 1});
 $daemon->start;
 my $port = Mojo::IOLoop->acceptor($daemon->acceptors->[0])->port;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/t/mojo/dom.t 
new/Mojolicious-6.28/t/mojo/dom.t
--- old/Mojolicious-6.26/t/mojo/dom.t   2015-10-23 19:30:35.000000000 +0200
+++ new/Mojolicious-6.28/t/mojo/dom.t   2015-10-30 15:41:09.000000000 +0100
@@ -773,6 +773,13 @@
 is $dom->at('[test2=""]')->tag, 'div', 'right tag';
 is $dom->at('[test3=""]'), undef, 'no result';
 
+# Multi-line attribute
+$dom = Mojo::DOM->new(qq{<div class="line1\nline2" />});
+is $dom->at('div')->attr->{class}, "line1\nline2", 'multi-line attribute 
value';
+is $dom->at('.line1')->tag, 'div', 'right tag';
+is $dom->at('.line2')->tag, 'div', 'right tag';
+is $dom->at('.line3'), undef, 'no result';
+
 # Whitespaces before closing bracket
 $dom = Mojo::DOM->new('<div >content</div>');
 ok $dom->at('div'), 'tag found';
@@ -2280,10 +2287,10 @@
   'right attribute';
 is $dom->find('head > [http-equiv$="-type"]')->[1], undef, 'no result';
 
-# Find "0" attribute value and unescape relaxed entity
+# Find "0" attribute value
 $dom = Mojo::DOM->new(<<EOF);
 <a accesskey="0">Zero</a>
-<a accesskey="1">O&gTn&gte</a>
+<a accesskey="1">O&gTn&gt;e</a>
 EOF
 is $dom->find('a[accesskey]')->[0]->text, 'Zero',    'right text';
 is $dom->find('a[accesskey]')->[1]->text, 'O&gTn>e', 'right text';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/t/mojo/headers.t 
new/Mojolicious-6.28/t/mojo/headers.t
--- old/Mojolicious-6.26/t/mojo/headers.t       2015-08-29 01:31:15.000000000 
+0200
+++ new/Mojolicious-6.28/t/mojo/headers.t       2015-10-30 05:27:35.000000000 
+0100
@@ -141,7 +141,7 @@
 is $headers->expires,       'Thu, 01 Dec 1994 16:00:00 GMT', 'right value';
 is $headers->header('o'), 'x', 'right value';
 
-# Parse multiline headers
+# Parse multi-line headers
 $headers = Mojo::Headers->new;
 $headers->parse(<<'EOF');
 Foo: first
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/t/mojo/prefork.t 
new/Mojolicious-6.28/t/mojo/prefork.t
--- old/Mojolicious-6.26/t/mojo/prefork.t       2015-08-29 01:31:21.000000000 
+0200
+++ new/Mojolicious-6.28/t/mojo/prefork.t       2015-10-29 18:48:37.000000000 
+0100
@@ -7,6 +7,8 @@
 plan skip_all => 'set TEST_PREFORK to enable this test (developer only!)'
   unless $ENV{TEST_PREFORK};
 
+use File::Basename 'dirname';
+use File::Spec::Functions 'catfile';
 use Mojo::IOLoop::Server;
 use Mojo::Server::Prefork;
 use Mojo::UserAgent;
@@ -26,6 +28,18 @@
 undef $prefork;
 ok !-e $file, 'file has been cleaned up';
 
+# Bad PID file
+my $bad = catfile dirname(__FILE__), 'does_not_exist', 'test.pid';
+$prefork = Mojo::Server::Prefork->new(pid_file => $bad);
+$prefork->app->log->level('fatal');
+my $log = '';
+my $cb = $prefork->app->log->on(message => sub { $log .= pop });
+eval { $prefork->ensure_pid_file };
+like $@,     qr/Can't create process id file/, 'right error';
+unlike $log, qr/Creating process id file/,     'right message';
+like $log,   qr/Can't create process id file/, 'right message';
+$prefork->app->log->unsubscribe(message => $cb);
+
 # Multiple workers and graceful shutdown
 my $port = Mojo::IOLoop::Server::->generate_port;
 $prefork = Mojo::Server::Prefork->new(
@@ -54,8 +68,8 @@
 );
 $prefork->on(reap => sub { push @reap, pop });
 $prefork->on(finish => sub { $graceful = pop });
-my $log = '';
-my $cb = $prefork->app->log->on(message => sub { $log .= pop });
+$log = '';
+$cb = $prefork->app->log->on(message => sub { $log .= pop });
 is $prefork->healthy, 0, 'no healthy workers';
 $prefork->run;
 ok $healthy >= 1, 'healthy workers';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Mojolicious-6.26/t/mojo/util.t 
new/Mojolicious-6.28/t/mojo/util.t
--- old/Mojolicious-6.26/t/mojo/util.t  2015-10-22 01:54:41.000000000 +0200
+++ new/Mojolicious-6.28/t/mojo/util.t  2015-10-29 17:04:45.000000000 +0100
@@ -191,7 +191,7 @@
 
 # html_unescape (special entities)
 is html_unescape('foo &#x2603; &CounterClockwiseContourIntegral; bar 
&sup1baz'),
-  "foo ☃ \x{2233} bar \x{00b9}baz", 'right HTML unescaped result';
+  "foo ☃ \x{2233} bar &sup1baz", 'right HTML unescaped result';
 
 # html_unescape (multi-character entity)
 is html_unescape(decode 'UTF-8', '&acE;'), "\x{223e}\x{0333}",
@@ -204,10 +204,6 @@
 # html_unescape (nothing to unescape)
 is html_unescape('foobar'), 'foobar', 'right HTML unescaped result';
 
-# html_unescape (relaxed)
-is html_unescape('&0&Ltf&amp&0oo&nbspba;&ltr'), "&0&Ltf&&0oo\x{00a0}ba;<r",
-  'right HTML unescaped result';
-
 # html_unescape (UTF-8)
 is html_unescape(decode 'UTF-8', 'foo&lt;baz&gt;&#x26;&#34;&OElig;&Foo;'),
   "foo<baz>&\"\x{152}&Foo;", 'right HTML unescaped result';


Reply via email to