--- /dev/null
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More tests => 9;
+use Test::Exception;
+
+do {
+ package Class;
+ use Mouse;
+
+ ::lives_ok {
+ has a => (
+ is => 'rw',
+ default => sub { [1] },
+ );
+ };
+
+ ::lives_ok {
+ has code => (
+ is => 'rw',
+ default => sub { sub { 1 } },
+ );
+ };
+
+ ::throws_ok {
+ has b => (
+ is => 'rw',
+ default => [],
+ );
+ } qr/References are not allowed as default values/;
+
+ ::throws_ok {
+ has c => (
+ is => 'rw',
+ default => {},
+ );
+ } qr/References are not allowed as default values/;
+
+ ::throws_ok {
+ has d => (
+ is => 'rw',
+ default => Test::Builder->new,
+ );
+ } qr/References are not allowed as default values/;
+};
+
+is(ref(Class->new->code), 'CODE', "default => sub { sub { 1 } } stuffs a coderef");
+is(Class->new->code->(), 1, "default => sub sub strips off the first coderef");
+is_deeply(Class->new->a, [1], "default of sub { reference } works");
+
+do {
+ package Class::Two;
+ use Mouse;
+ has foo => (is => 'rw', default => sub {
+ die unless $_[0]->isa('Class::Two');
+ shift->default_foo;
+ });
+ sub default_foo { 1 };
+};
+
+my $obj2 = Class::Two->new;
+is($obj2->foo, 1, 'default method gets the $_[0] it needs to work');