Workaround a Test::Builder2 (2.00_06)'s threading issue.
[gitmo/Mouse.git] / t / 001_mouse / 060-threads.t
CommitLineData
f259aaad 1#!perl
2use strict;
3use warnings;
652b2a97 4use constant HAS_THREADS => eval{ require threads && require threads::shared };
20a12328 5use Test::More;
f259aaad 6
dc5cf9ef 7use if !HAS_THREADS, 'Test::More',
8 (skip_all => "This is a test for threads ($@)");
9use if $Test::More::VERSION == 2.00_01, 'Test::More',
10 (skip_all => "Test::Builder2 2.00_01 has bugs about threads");
11
9e69967c 12pass 'dummy test for Test::Builder 2.00_06';
dc5cf9ef 13
f259aaad 14{
20a12328 15 package MyTraits;
16 use Mouse::Role;
17
f259aaad 18 package MyClass;
19 use Mouse;
20
21 has foo => (
22 is => 'rw',
aff73a9e 23 isa => 'Foo',
24 );
25
26 package Foo;
27 use Mouse;
28
29 has value => (
30 is => 'rw',
20a12328 31 isa => 'Int',
32
33 traits => [qw(MyTraits)],
f259aaad 34 );
35}
9e69967c 36pass;
f259aaad 37
aff73a9e 38my $o = MyClass->new(foo => Foo->new(value => 42));
f259aaad 39threads->create(sub{
aff73a9e 40 my $x = MyClass->new(foo => Foo->new(value => 1));
41 is $x->foo->value, 1;
f259aaad 42
aff73a9e 43 $x->foo(Foo->new(value => 2));
f259aaad 44
aff73a9e 45 is $x->foo->value, 2;
f259aaad 46
47 MyClass->meta->make_immutable();
48
aff73a9e 49 $x = MyClass->new(foo => Foo->new(value => 10));
50 is $x->foo->value, 10;
f259aaad 51
aff73a9e 52 $x->foo(Foo->new(value => 20));
f259aaad 53
aff73a9e 54 is $x->foo->value, 20;
f259aaad 55})->join();
56
aff73a9e 57is $o->foo->value, 42;
20a12328 58
59$o = MyClass->new(foo => Foo->new(value => 43));
60is $o->foo->value, 43;
61
f259aaad 62ok !$o->meta->is_immutable;
63
dc5cf9ef 64pass "done";
65
20a12328 66done_testing;