Make strict_constructor public
[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 };
f259aaad 5
20a12328 6use if !HAS_THREADS, 'Test::More', (skip_all => "This is a test for threads ($@)");
7use Test::More;
f259aaad 8
9{
20a12328 10 package MyTraits;
11 use Mouse::Role;
12
f259aaad 13 package MyClass;
14 use Mouse;
15
16 has foo => (
17 is => 'rw',
aff73a9e 18 isa => 'Foo',
19 );
20
21 package Foo;
22 use Mouse;
23
24 has value => (
25 is => 'rw',
20a12328 26 isa => 'Int',
27
28 traits => [qw(MyTraits)],
f259aaad 29 );
30}
31
aff73a9e 32my $o = MyClass->new(foo => Foo->new(value => 42));
f259aaad 33threads->create(sub{
aff73a9e 34 my $x = MyClass->new(foo => Foo->new(value => 1));
35 is $x->foo->value, 1;
f259aaad 36
aff73a9e 37 $x->foo(Foo->new(value => 2));
f259aaad 38
aff73a9e 39 is $x->foo->value, 2;
f259aaad 40
41 MyClass->meta->make_immutable();
42
aff73a9e 43 $x = MyClass->new(foo => Foo->new(value => 10));
44 is $x->foo->value, 10;
f259aaad 45
aff73a9e 46 $x->foo(Foo->new(value => 20));
f259aaad 47
aff73a9e 48 is $x->foo->value, 20;
f259aaad 49})->join();
50
aff73a9e 51is $o->foo->value, 42;
20a12328 52
53$o = MyClass->new(foo => Foo->new(value => 43));
54is $o->foo->value, 43;
55
f259aaad 56ok !$o->meta->is_immutable;
57
20a12328 58done_testing;