Checking in changes prior to tagging of version 0.90.
[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 ($@)");
95637edb 9use if $Test::More::VERSION >= 2.00, 'Test::More',
10 (skip_all => "Test::Builder2 has bugs about threads");
dc5cf9ef 11
f259aaad 12{
20a12328 13 package MyTraits;
14 use Mouse::Role;
15
f259aaad 16 package MyClass;
17 use Mouse;
18
19 has foo => (
20 is => 'rw',
aff73a9e 21 isa => 'Foo',
22 );
23
24 package Foo;
25 use Mouse;
26
27 has value => (
28 is => 'rw',
20a12328 29 isa => 'Int',
30
31 traits => [qw(MyTraits)],
f259aaad 32 );
33}
9e69967c 34pass;
f259aaad 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;