Workaround a bug with threads. cleaning stash with threads can cause panic or SEGV.
[gitmo/Mouse.git] / t / 001_mouse / 060-threads.t
1 #!perl
2 use strict;
3 use warnings;
4 use constant HAS_THREADS => eval{ require threads };
5
6 use if !HAS_THREADS, 'Test::More', (skip_all => "This is a test for threads ($@)");
7 use Test::More;
8
9 {
10     package MyTraits;
11     use Mouse::Role;
12
13     package MyClass;
14     use Mouse;
15
16     has foo => (
17         is => 'rw',
18         isa => 'Foo',
19     );
20
21     package Foo;
22     use Mouse;
23
24     has value => (
25         is => 'rw',
26         isa => 'Int',
27
28         traits => [qw(MyTraits)],
29     );
30 }
31
32 my $o = MyClass->new(foo => Foo->new(value => 42));
33 threads->create(sub{
34     my $x = MyClass->new(foo => Foo->new(value => 1));
35     is $x->foo->value, 1;
36
37     $x->foo(Foo->new(value => 2));
38
39     is $x->foo->value, 2;
40
41     MyClass->meta->make_immutable();
42
43     $x = MyClass->new(foo => Foo->new(value => 10));
44     is $x->foo->value, 10;
45
46     $x->foo(Foo->new(value => 20));
47
48     is $x->foo->value, 20;
49 })->join();
50
51 is $o->foo->value, 42;
52
53 $o = MyClass->new(foo => Foo->new(value => 43));
54 is $o->foo->value, 43;
55
56 ok !$o->meta->is_immutable;
57
58 done_testing;