Merge remote branch 'origin/master' into merge-0.74
[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
12
f259aaad 13{
20a12328 14 package MyTraits;
15 use Mouse::Role;
16
f259aaad 17 package MyClass;
18 use Mouse;
19
20 has foo => (
21 is => 'rw',
aff73a9e 22 isa => 'Foo',
23 );
24
25 package Foo;
26 use Mouse;
27
28 has value => (
29 is => 'rw',
20a12328 30 isa => 'Int',
31
32 traits => [qw(MyTraits)],
f259aaad 33 );
34}
35
aff73a9e 36my $o = MyClass->new(foo => Foo->new(value => 42));
f259aaad 37threads->create(sub{
aff73a9e 38 my $x = MyClass->new(foo => Foo->new(value => 1));
39 is $x->foo->value, 1;
f259aaad 40
aff73a9e 41 $x->foo(Foo->new(value => 2));
f259aaad 42
aff73a9e 43 is $x->foo->value, 2;
f259aaad 44
45 MyClass->meta->make_immutable();
46
aff73a9e 47 $x = MyClass->new(foo => Foo->new(value => 10));
48 is $x->foo->value, 10;
f259aaad 49
aff73a9e 50 $x->foo(Foo->new(value => 20));
f259aaad 51
aff73a9e 52 is $x->foo->value, 20;
f259aaad 53})->join();
54
aff73a9e 55is $o->foo->value, 42;
20a12328 56
57$o = MyClass->new(foo => Foo->new(value => 43));
58is $o->foo->value, 43;
59
f259aaad 60ok !$o->meta->is_immutable;
61
dc5cf9ef 62pass "done";
63
20a12328 64done_testing;